一个简单的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();
相关推荐
dbdr0901几秒前
Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十六天
linux·运维·服务器·网络·python·学习
群联云防护小杜30 分钟前
服务器异常磁盘写排查手册 · 已删除文件句柄篇
运维·服务器·nginx·开源·lua
liliangcsdn39 分钟前
结合prompt分析NodeRAG的build过程
java·服务器·人工智能·数据分析·知识图谱
siriuuus1 小时前
Linux 磁盘扩容及分区相关操作实践
linux·运维·服务器
jz_ddk2 小时前
[Linux] Linux标准块设备驱动详解:从原理到实现
linux·运维·服务器·驱动开发
也许,也会3 小时前
PLC NCU1750与PLC1200s7通讯
运维·服务器
小韩博3 小时前
Windows 权限提升(一)
windows
Hello.Reader4 小时前
一文吃透 Protobuf “Editions” 模式从概念、语法到迁移与实战
linux·服务器·网络·protobuf·editions
魔都吴所谓5 小时前
【Python】根据开始时间、结束时间计算中间时间
开发语言·windows·python
syty20206 小时前
flink 伪代码
java·windows·flink