基于TCP的网络应用程序的编写

1、说明

这是一个最基本的实例,一个服务端,一个客户端;代码在vs2019下编译通过;服务端和客户端放在同一台机器上运行效果如下:
基于TCP的网络应用程序的编写_第1张图片

2、代码

1)服务端

// TCPSrv.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include 
#include 
#include 
#include 
#include 

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

int main()
{
   // 加载套子节库
    WORD wVersionRequested;
    WSADATA wsaData;
    int err = 0;

    wVersionRequested = MAKEWORD(1, 1);
    err = WSAStartup(wVersionRequested, &wsaData);
    if (err != 0)
    {
        return -1;
    }

    if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
    {
        WSACleanup();
        return -1;
    }

    // 创建用于监听的套接字
    SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);

    SOCKADDR_IN addrSrv;
    addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(6000);

    // 绑定套接字
    bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

    // 将套接字设为监听模式,准备接受用户请求
    listen(sockSrv, 5);

    SOCKADDR_IN addrClient;
    int len = sizeof(SOCKADDR);

    while (true)
    {
        // 等待客户请求的到来
        SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
        char strAddr[22];
        PCSTR ptrAddr = inet_ntop(AF_INET, &addrClient.sin_addr, strAddr, sizeof(strAddr));
        char sendBuf[300];
        time_t curTime = time(NULL);
        sprintf_s(sendBuf, "Welcome %s to TCP Serve at time: %d", ptrAddr, (int)curTime);

        // 发送数据
        send(sockConn, sendBuf, (int)strlen(sendBuf)+1,0);
        
        // 接收数据
        char recvBuf[100];
        recv(sockConn, recvBuf, 100, 0);

        // 打印接受的数据
        printf("%s\n", recvBuf);
        
        // 关闭套接字
        closesocket(sockConn);
    }

    return 0;
}

2)客户端

// TCPClient.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

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

int main()
{
    // 加载套子节库
    WORD wVersionRequested;
    WSADATA wsaData;
    int err = 0;

    wVersionRequested = MAKEWORD(1, 1);
    err = WSAStartup(wVersionRequested, &wsaData);
    if (err != 0)
    {
        return -1;
    }

    if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1)
    {
        WSACleanup();
        return -1;
    }

    // 创建套接字
    SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);

    SOCKADDR_IN addrSrv;
    inet_pton(AF_INET, "127.0.0.1", &addrSrv.sin_addr.S_un.S_addr);
    addrSrv.sin_family = AF_INET;
    addrSrv.sin_port = htons(6000);

    // 向服务器发起请求
    connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

    // 接收数据打印
    char recvBuf[100];
    recv(sockClient, recvBuf, 100, 0);
    printf("%s\n", recvBuf);

    Sleep(2000);

    // 发送数据
    time_t curTime = time(NULL);
    char sendBuf[200];
    sprintf_s(sendBuf, "Thank you! Nice to meet you at time: %d !", (int)curTime);
    send(sockClient, sendBuf, (int)strlen(sendBuf) + 1, 0);

    // 关闭套接字
    closesocket(sockClient);
    WSACleanup();

	return 0;
}

你可能感兴趣的:(C++应用)