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;
}
相关推荐
一起养小猫1 分钟前
Flutter for OpenHarmony 进阶:Socket通信与网络编程深度解析
网络·flutter·harmonyos
Smart-Space5 分钟前
cpphtmlbuilder-c++灵活构造html
c++·html
会叫的恐龙5 分钟前
C++ 核心知识点汇总(第四日)(循环结构)
c++·算法·循环结构
Code小翊7 分钟前
re标准库模块一天学完
运维·服务器·网络
落羽的落羽9 分钟前
【Linux系统】文件IO:理解文件描述符、重定向、缓冲区
linux·服务器·开发语言·数据结构·c++·人工智能·机器学习
.小墨迹17 分钟前
apollo中速度规划的s-t图讲解【针对借道超车的问题】
开发语言·数据结构·c++·人工智能·学习
小龙报18 分钟前
【数据结构与算法】单链表的综合运用:1.合并两个有序链表 2.分割链表 3.环形链表的约瑟夫问题
c语言·开发语言·数据结构·c++·算法·leetcode·链表
拼好饭和她皆失19 分钟前
图论:最小生成树,二分图详细模板及讲解
c++·算法·图论
阿猿收手吧!20 分钟前
【C++】C++原子类型隐式转换解析
java·c++
HL_风神21 分钟前
C++设计模式学习-工厂方法模式
c++·学习·设计模式