当前位置: 首页 > news >正文

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

初始化

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

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

IP及端口号配置

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();
}

监听客户端连接

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

接受客户端连接

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

接收

int bytesReceived = recv(clientSocket, (char*)(_sRxBuffer + _sRxLenght), BUFFER_SIZE, 0);

发送

int txPacketlenght = send(socket, (const char*)_sTxBuffer, txPacketlenght, 0);

回收socket资源

closesocket(clientSocket);
closesocket(serverSocket);
WSACleanup();

检查连接断开情形

int bytesReceived = recv(clientSocket, buffer, bufferSize, 0);
if (bytesReceived == 0) {printf("Client socket disconnected gracefully.\n");
} else if (bytesReceived == SOCKET_ERROR) {int error = WSAGetLastError();if (error == WSAECONNRESET) {printf("Client socket disconnected unexpectedly.\n");} else {printf("Recv failed with error: %d\n", error);}
}

http://www.mrgr.cn/news/90354.html

相关文章:

  • PHP E-mail发送机制详解
  • 【JVM详解五】JVM性能调优
  • Django REST Framework:如何获取序列化后的ID
  • Json-RPC框架项目(一)
  • Ansible自动化部署K8s集群一 Ansible的基础使用实战
  • 相似性图相关性重构网络用于无监督跨模态哈希
  • Unity-Mirror网络框架-从入门到精通之MultipleMatches示例
  • Excel大数据量导入导出
  • 排列组合
  • Java 中的 128 陷阱与自动拆装箱深度解析
  • 3.3 学习UVM中的uvm_driver 类分为几步?
  • GMS认证相关问题汇总
  • Docker使用指南与Dockerfile文件详解:从入门到实战
  • ESP32S3基于espidf移植I2C SSD1306/sh1106 WouoUIPage磁贴案例
  • 【Qt之·类QTextCursor】
  • 32单片机学习记录1之GPIO
  • 深度学习入门--python入门1
  • flink cdc2.2.1同步postgresql表
  • Python自动化办公之批量重命名
  • RockyLinux AlmaLinux RedHat 8,9安装图形化
  • Python自动化办公之Excel拆分
  • 单纯的DeepSeek讲解
  • 泰山派开发板测试,仅记录
  • MIPI 详解:C-PHY
  • QT 5.15.2 开发地图ArcGIS 100.15.6(ArcGIS Runtime SDK for Qt)
  • 【Bug】属性 PackageVersion 应在所有目标框架中具有单个值,但却具有以下值