一个简单的Windows TCP服务器实现

初始化

c 复制代码
WSADATA wsaData;
SOCKET serverSocket, clientSocket;
struct sockaddr_in serverAddr = { 0x00 };
struct sockaddr_in clientAddr = { 0x00 };
int clientAddrLen = sizeof(clientAddr);

if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
    printf("WSAStartup failed.\n");
}

创建socket

c 复制代码
if ((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
    printf("Socket failed.\n");
    WSACleanup();
}

IP及端口号配置

c 复制代码
serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = INADDR_ANY;
serverAddr.sin_port = htons(9988);

if (bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) {
    printf("Bind failed.\n")
    closesocket(serverSocket);
    WSACleanup();
}

监听客户端连接

c 复制代码
if (listen(serverSocket, 5) == SOCKET_ERROR) {
    printf("Listen failed.\n");
    closesocket(serverSocket);
    WSACleanup();
}

接受客户端连接

c 复制代码
if ((clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen)) == INVALID_SOCKET) {
    printf("Accept failed.\n");
    closesocket(serverSocket);
    WSACleanup();
}

接收

c 复制代码
int bytesReceived = recv(clientSocket, (char*)(_sRxBuffer + _sRxLenght), BUFFER_SIZE, 0);

发送

c 复制代码
int txPacketlenght = send(socket, (const char*)_sTxBuffer, txPacketlenght, 0);

回收socket资源

c 复制代码
closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();
相关推荐
chde2Wang19 分钟前
Hadoop集群无datanode进程
linux·运维·服务器
叼烟扛炮31 分钟前
Linux 学习笔记(十八):进程控制——优雅地退出与等待
linux·运维·服务器
2601_967980112 小时前
Python之wxPython模块的安装
linux·windows·python·wxpython·gui设计·1024程序员节
Shadow(⊙o⊙)2 小时前
仿muduo实现高并发服务器——EventLoop.hpp初步设计(未纳入超时管理模块)
运维·服务器
深盾科技_Virbox2 小时前
换机或重装后软件许可怎么恢复:先核对哪四项
java·服务器·数据库
启观川3 小时前
[windows] windows下将文件夹映射为磁盘
windows·笔记
360智汇云3 小时前
隔离VPC标准路径:出公网链路的设计与实现
android·服务器·数据库
非凡ghost3 小时前
Photo Supreme:专业高效的照片收藏管理专家
服务器·前端·人工智能·电脑·软件需求
碧海银沙音频科技研究院3 小时前
基于炬芯ATS308X的BLE 无线方式离线日志传输导出功能实现
java·linux·服务器
gz927cool4 小时前
在 Harness 上搭建 Agent-Native 应用:可迁移经验
服务器·人工智能·ai·系统架构