一个简单的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();
相关推荐
一条破秋裤4 小时前
Linux 共享内存通信:POSIX 共享内存与 mmap
linux·运维·服务器
贵州山魈羡民4 小时前
【玩转手机】通过 Podroid 上的 Alpine 部署 1Panel,把微型服务器装进口袋
运维·服务器
程序员-Benothing6 小时前
Shell输入输出详解:read、echo、printf、颜色输出
linux·运维·服务器
FPGA小徐7 小时前
从 NEMU 到 AbstractMachine:程序、运行时环境与 AM 完全解析
linux·运维·服务器
呉師傅8 小时前
得力P2500、M2500系列打印机硒鼓加粉及清零方法【纯享版】
运维·网络·windows·电脑
ZhangJun959 小时前
从零写一个类鲁大师的硬件检测小工具,软件附上,可直接使用
windows·测试工具·电脑·笔记本电脑·硬件架构
..Dauntless..11 小时前
【Linux】进程地址空间初步理解
linux·运维·服务器
imperialeast11 小时前
创建WAV文件 韩文、德文、俄文等unicode音乐标签
windows·小程序
Julien200411 小时前
Docker 网络(一)
linux·运维·服务器·ssh·学习方法
易点云徐源11 小时前
社保费管理客户端打开后进度条卡20%,等待1分钟提示获取接收配置失败
windows