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;
}
相关推荐
xiaoye-duck9 分钟前
《C++ 工具库实战》高性能日志 spdlog:从基础使用到工程化封装
c++·第三方库
努力努力再努力wz23 分钟前
【Lua入门系列】从 C++ 迭代器到 Lua 迭代器:一文深入理解 Lua 有状态以及无状态迭代器与泛型for、闭包、ipairs、pairs 和 next
开发语言·c++·lua
努力实干30 分钟前
第二阶段 · 第 7 课:C++ 多线程与线程安全
开发语言·c++·安全
|_⊙41 分钟前
应用层协议HTTP与HTTPS
网络·网络协议·http
牢姐与蒯44 分钟前
WSL2 迁移教程:把Ubuntu+WSL2从C盘挪到别的盘
linux·运维·服务器·网络·ubuntu·1024程序员节
垆边人似月.1 小时前
RDMA 文件传输踩坑(二):为什么 `sleep()` 不能保证接收端准备好了?
linux·服务器·网络·rdma
秦禹辰1 小时前
ClipSketch AI把视频改造成图文漫画:选关键帧、生成手绘分镜、融合IP形象并自动写小红书文案
人工智能·tcp/ip·音视频
深信达沙箱1 小时前
轻量化沙箱防护|政企私有化IM防泄密升级,安全不增重
网络·源代码防泄密·源代码加密·磁盘加密·全盘加密·全磁盘加密
ESDWAN1 小时前
SD-WAN 是什么?工作原理、适用场景与选型要点
开发语言·网络·数据库·架构·php
云飞云共享云桌面2 小时前
智能装备工厂研发部门多设计师共享一台SolidWorks服务器做设备装配建模
运维·服务器·网络·人工智能·3d·自动化·制造