一个简单的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();
相关推荐
不羁。。1 小时前
【操作系统安全】任务6:Linux 系统文件与文件系统安全 学习指南
linux·运维·服务器
Ronin-Lotus2 小时前
嵌入式硬件篇---龙芯PWM生成
嵌入式硬件·机器人·c·pwm·龙芯·2k1000
珹洺2 小时前
计算机网络:(二)计算机网络在我国发展与网络类别与性能 (附带图谱更好对比理解)
运维·服务器·网络·数据库·后端·计算机网络
小林熬夜学编程2 小时前
【高并发内存池】第一弹---深入解析内存池:项目介绍、原理及设计定长内存池全攻略
linux·服务器·c语言·开发语言·c++·算法
Lllongroad2 小时前
LINUX驱动学习之IIC驱动-----以AP3216C为例
linux·服务器·驱动开发·学习
善我3 小时前
基于 easyExcel 3.1.5依赖的包 实现动态表头 动态表格内容
java·服务器·前端
Koma_zhe3 小时前
【网站检测工具Web-Check】Web-Check本地部署与远程访问解决方案全面掌控网站状态
linux·服务器·网络
sukalot4 小时前
Windows 图形显示驱动开发-WDDM 3.0功能- D3D12 视频编码(一)
windows·驱动开发
孙同学_4 小时前
【Linux篇】环境变量与地址空间
linux·运维·服务器
__XYZ4 小时前
Linux shell 进度条
linux·运维·服务器