分布式练手:Client

发布于:2025-02-11 ⋅ 阅读:(38) ⋅ 点赞:(0)

步骤:
1.新建一个空项目,项目名称为Server,解决方案名称为Socket;
2.新建一个空项目名称为Client;
3.为Server构建一个头文件,一个源文件,Client同理。
4.右击项目Client,将SDL检查改为否。
5.按ctrl+F5先运行Server,再右击"Client"->调试->启动新实例;
6.开始运行,可以互相发送消息了。


源程序:【免费】分布式练手:Client资源-CSDN文库

#include"Client.h"
#include<stdio.h>
#include<stdlib.h>
int main()
{

    init_Socket();
    SOCKET fd = CreateClientSocket("127.0.0.1");
    printf("Server connected...\n");
    printf("tip:Enter 'end' to end the connection\n");

    //发送消息
    char recvbuf[BUFSIZ] = { 0 };
    char sendbuf[BUFSIZ] = { 0 };
    char endbuf[BUFSIZ] = { "end" };
    while (true)
    {
        //发送消息
        printf("send>");
        gets_s(sendbuf, BUFSIZ);

        //输入'end'断开连接
        if (strcmp(sendbuf, endbuf) == 0)
        {
            return false;
        }
        if (SOCKET_ERROR == send(fd, sendbuf, strlen(sendbuf), 0))
        {
            err("send");
        }

        //接收消息
        if (0 < recv(fd, recvbuf, BUFSIZ, 0))
        {

            printf("recv:%s\n", recvbuf);
            memset(recvbuf, 0, sizeof(recvbuf));

        }


    }

    closesocket(fd);
    close_Socket();

    system("pause");


    return 0;
}


bool init_Socket()
{
    WSADATA wsadata;
    if (0 != WSAStartup(MAKEWORD(2, 2), &wsadata))
    {
        printf("WSAStartup failed code %d", WSAGetLastError());
        return false;
    }
    //WSA   Windows异步套接字
    //parm1 请求的Socket版本
    //parm2 传出参数
    return true;
}

bool close_Socket()
{
    if (0 != WSACleanup())
    {
        printf("WSACleanup failed code %d", WSAGetLastError());
        return false;
    }
    return true;
}

SOCKET CreateClientSocket(const char* ip)
{
    //1  创建空的Socket
    //af 地址协议族
    //type 传输协议类型: 流式套接字 数据报套接字
    //protocol 使用的具体传输协议
    SOCKET fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (fd == INVALID_SOCKET)
    {
        err("socket");
        return INVALID_SOCKET;
    }


    //2 与服务器建立连接
    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);
    addr.sin_addr.S_un.S_addr = inet_addr(ip);
    if (INVALID_SOCKET == connect(fd, (struct sockaddr*)&addr, sizeof(addr)))
    {
        err("connect");
        return false;
    }

    return fd;

}

C++程序实现客户端与服务器之间的通信。`int main()`函数中包含了初始化套接字、创建客户端socket、建立连接、发送和接收数据以及关闭连接等步骤:

1. `init_Socket()` 函数用于初始化Windows异步套接字API(Winsock),如果初始化失败,会返回false并打印错误信息。

2. `CreateClientSocket()` 创建一个新的socket连接到指定的IP地址(这里是127.0.0.1),表示本地回环测试。

3. 客户端通过循环不断提示用户输入消息,然后发送给服务器。如果输入的是"end",则结束连接并返回false。

4. 接收服务器发回的消息,并将其打印出来。

5. 当接收或发送数据失败时,会捕获错误并通过`err()`函数打印错误信息。

6. 连接结束后,调用`closesocket(fd)`关闭套接字,然后`close_Socket()`关闭整个Winsock库,最后系统暂停进程等待用户按键。


网站公告

今日签到

点亮在社区的每一天
去签到