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

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

包含头文件

#include <winsock2.h>
#include <stdio.h>

需要链接的库文件

ws2_32.lib

winsocket初始化

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

创建winsocket

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

回收winsocket资源

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

相关文章:

  • windows系统 从 Hugging Face网站上使用 huggingface-cli 命令下载AI大模型到本地
  • 在npm上传属于自己的包
  • ARM64 Trust Firmware [一]
  • 【Copilot】Redis SCAN SSCAN
  • Linux探秘坊-------4.进度条小程序
  • DeepSeek 突然来袭,AI 大模型变革的危机与转机藏在哪?
  • ES6 Proxy 用法总结以及 Object.defineProperty用法区别
  • 【redis】数据类型之bitmaps
  • 【H5自适应】高端科技类pbootcms网站模板 – 三级栏目、下载与招聘功能支持
  • Python自动化办公之Excel拆分
  • 真正通俗易懂的Langchain入门学习(六)
  • HDFS核对迁移的历史数据是否正确
  • python爬虫--简单登录
  • SpringBoot_基础
  • 树莓派上 基于Opencv 实现人脸检测与人脸识别
  • 通过 VBA 在 Excel 中自动提取拼音首字母
  • 互联网大厂中面试的高频计算机网络问题及详解
  • 20240824 美团 笔试
  • 3.3.3 VO-O语法- 语法算子(二)
  • 哈希表-两个数的交集
  • 怎样做电影网站/长沙百度搜索排名优化
  • 浙江建设信息港证书查询/seo是什么及作用
  • 南宁市网站/商品热搜词排行榜
  • 宝安区做网站/合肥网络推广服务
  • 企业网站建设方案平台/自动seo优化
  • app聊天软件开发/aso优化注意什么