TCP&IP网络编程(尹圣雨)简易版回声客户端

端口号随便写了一个,写的是 2345。

如果需要按下Q键退出,客户端部分加个判断即可

服务端:

cpp 复制代码
#include <iostream>
#include <WinSock2.h>

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

using std::cout;
using std::endl;

int main()
{
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        cout << "WSA Error" << endl;
        return 0;
    }

    sockaddr_in sd;
    sd.sin_family = AF_INET;
    sd.sin_port = htons(2345);
    sd.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

    // socket
    SOCKET fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (fd == INVALID_SOCKET)
    {
        cout << "socket error" << endl;
        return 0;
    }
    // bind
    if (bind(fd, (sockaddr *)(&sd), sizeof(sd)) == SOCKET_ERROR)
    {
        cout << "bind error" << endl;
        return 0;
    }

    // listen
    listen(fd, 10);

    sockaddr_in sd2;
    int sd2Size = sizeof(sd2);
    // accept
    SOCKET clientFd = accept(fd, (sockaddr *)(&sd2), &sd2Size);
    if (clientFd == INVALID_SOCKET)
    {
        cout << "客户端 socket error" << endl;
    }
    char buf[1024] = "";
    while (1)
    {

        if (recv(clientFd, buf, 1024, 0) != 0)
        {
            cout << "recv " << buf << endl;
            send(clientFd, buf, 1024, 0);
             // strcpy(buf, "");
        }

    }
    closesocket(clientFd);
    closesocket(fd);

    WSACleanup();

    return 0;
}

客户端:

cpp 复制代码
#include <iostream>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")

using std::cout;
using std::endl;
using std::cin;

int main()
{
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        cout << "WSA Error" << endl;
        return 0;
    }
    // socket 
    SOCKET fd = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
    if (fd == INVALID_SOCKET)
    {
        cout << "socket error" << endl;
        return 0;
    }

    sockaddr_in sd;
    sd.sin_family = AF_INET;
    sd.sin_port = htons(2345);
    sd.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

    // connect
    if (connect(fd, (sockaddr *)(&sd), sizeof(sd)) == SOCKET_ERROR)
    {
        cout << "connect error" << endl;
        return 0;
    }
    while (1)
    {
        char buf[1024];
        cout << "请输入数据:" << endl;
        cin >> buf;
        send(fd, buf, 1024, 0);

        if (recv(fd, buf, 1024, 0) > 0)
        {
            cout << buf << endl;
        }
    }
    closesocket(fd);
    WSACleanup();
    getchar();

    return 0;
}
相关推荐
磊 子7 小时前
STL之deque和list以及两者与vector的对比
开发语言·c++·list
郝学胜_神的一滴7 小时前
CMake 012:Linux 下动态库与可执行程序的单文件构建
c++·cmake
小poop7 小时前
操作符详解:从入门到精通
c++
CoreTK_EMC7 小时前
牙科医疗器械 ESD 静电整改案例|芯通康医疗级方案,护航诊疗安全与合规
网络·学习·emc整改·芯通康
山上三树7 小时前
C/C++ 高频报错速查表(开发通用版)
c语言·开发语言·c++
♛识尔如昼♛7 小时前
C 进阶(15) - 网络IPC:套接字
网络·套接字
jscxy52067 小时前
ospf综合实验
运维·服务器·网络
Tian_Hang7 小时前
Factory Method | 工厂方法
开发语言·c++
IP搭子来一个7 小时前
爬虫使用代理 IP 频繁失效,该如何定位问题?
网络·爬虫·tcp/ip
csdn_aspnet8 小时前
Modbus TCP C# 客户端程序
服务器·网络·tcp/ip·c#