Windows下的TCP/IP实例

1.注意事项

windows下winsock.h/winsock2.h

linux下sys/socket.h

不同平台头文件不一样

#include <winsock.h> 或者 #include <winsock2.h>

2. 安装minGW

目标是在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序。
安装参考链接

3. 代码

说明:只有一个电脑,创建进程测试的。代码保存成server.cpp,最后运行

bash 复制代码
g++ serve.cpp -lws2_32

serve.cpp

c 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>

#pragma comment(lib, "ws2_32.lib")

#define PORT 8888
#define MAX_CONNECTIONS 5
//windows下winsock.h/winsock2.h 
//linux下sys/socket.h
//不同平台头文件不一样
//#include <winsock.h> 或者 #include <winsock2.h>
//<arpa/inet.h>用<windows.h>代替

DWORD WINAPI serverThread(LPVOID lpParam) {
    SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(PORT);
    serverAddr.sin_addr.s_addr = INADDR_ANY;

    bind(serverSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

    listen(serverSocket, MAX_CONNECTIONS);

    printf("Server listening on port %d\n", PORT);
	struct sockaddr_in clientAddr;
	int clientAddrLen = sizeof(clientAddr);

	SOCKET clientSocket = accept(serverSocket, (struct sockaddr*)&clientAddr, &clientAddrLen);
    while (1) {

        char buffer[1024] = {0};
        recv(clientSocket, buffer, 1024, 0);
        printf("Received message from client: %s\n", buffer);

        send(clientSocket, "Message received.\n", strlen("Message received"), 0);
        if (strcmp(buffer, "serve_exit\n") == 0) {
            break;
        }
        
    }
    closesocket(clientSocket);
    closesocket(serverSocket);

    return 0;
}

int main() {
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2, 2), &wsaData);

    HANDLE serverThreadHandle = CreateThread(NULL, 0, serverThread, NULL, 0, NULL);

    Sleep(100); // 等待服务器线程启动

    SOCKET clientSocket = socket(AF_INET, SOCK_STREAM, 0);

    struct sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(PORT);
    serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));

    char message[1024];
    while (1) {
        printf("Enter message: ");
        fgets(message, 1024, stdin);
        send(clientSocket, message, strlen(message), 0);

        if (strcmp(message, "exit\n") == 0) {
            break;
        }

        char buffer[1024] = {0};
        recv(clientSocket, buffer, 1024, 0);
        printf("Server says: %s", buffer);
		
    }

    closesocket(clientSocket);
    CloseHandle(serverThreadHandle);

    WSACleanup();

    return 0;
}
相关推荐
bbq粉刷匠11 分钟前
HTTP 深度解析
网络·网络协议·http
老鼠拧刀满街找猫17 分钟前
Windows Docker部署Redis一主两从+哨兵完整实战(含静态IP方案)
windows·redis·docker
tiantianuser26 分钟前
NVME-oF IP 设计16 : 适于高速网络存储系统的IP设计2
网络协议·rdma·高速传输·roce v2·nvme of
RisunJan1 小时前
Linux命令-traceroute(IP 路由路径追踪)
linux·运维·tcp/ip
老王的笔记v1 小时前
40期 本地语音克隆工具LuxTTS,1GB显存也能快速生成配音
windows
我爱cope1 小时前
【计算机网络 | 数据链路层3:MAC 地址是什么?它和 IP 地址有什么区别?】
学习·tcp/ip·计算机网络·智能路由器·数据链路层
FPGA小迷弟2 小时前
AXI4-Stream协议详解与Vivado自定义IP核封装实战
网络协议·tcp/ip·fpga开发·fpga·硬件开发
sudebao点com14 小时前
一次“Google 能打开,FlexTV 打不开”的 DNS 故障排查:从 curl 超时到完整证据链
windows·macos·https·cdn·dns·nslookup·网络排错
非凡ghost16 小时前
分区助手:Windows 磁盘管理的“瑞士军刀“,分区调整不再怕丢数据
服务器·windows·电脑·软件需求
深蓝海拓20 小时前
基于socket的 TCP上位机通信内容解析程序
网络·笔记·python·学习·tcp/ip·plc