分布式练手:Client

步骤:

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 recvbufBUFSIZ = { 0 };

char sendbufBUFSIZ = { 0 };

char endbufBUFSIZ = { "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库,最后系统暂停进程等待用户按键。

相关推荐
syagain_zsx33 分钟前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小鱼仙官34 分钟前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
方方洛1 小时前
ray教程-14-RayTune与超参搜索
人工智能·分布式·机器学习
2CM_Embed1 小时前
μC/OS-II 任务管理详解(三):任务创建、任务栈、删除、优先级修改与挂起恢复
操作系统
晚风予卿云月1 小时前
【C++高并发内存池】 1.定长内存池的实现
开发语言·c++·内存管理
深圳市恒星物联科技有限公司2 小时前
排水管网监测分层分布式架构:感知-传输-平台-应用详解
分布式·架构
硅基手札2 小时前
操作系统设计思想系列 11 · ThreadX 深度 — 预抢占阈值·认证型设计
操作系统·开源项目·嵌入式开发·嵌入式操作系统·设计思想·threadx
Data-Miner2 小时前
一个省大模型积分的 Excel 数据处理方案:脱敏生成逻辑,脚本复用把 token 降到 0
人工智能·windows·excel
无巧不成书02182 小时前
Tomcat部署JSP文件完整指南:手动部署+IDEA工程化实现 附404访问错误全排查
java·ide·windows·tomcat·intellij-idea·js
大泽九章2 小时前
XSS入门:存储型、反射型、DOM型,用Flask全复现
python·网络安全·flask