修改下面的代码如何实现服务器与多个客户端的通信,求大神解释,初学小白

qq_37851694 qq_37851694 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
//服务器
#include <stdio.h>
#include <windows.h>
#pragma comment(lib, "Ws2_32.lib")
/***定义端口**/
#define PORT 8888
/***定义最大传输数据量**/
#define MAXDATA 100
/****在入口函数中输入主机IP地址****/
int main(int argc, char** argv)
{
/*定义标志,接收到第一个client时,不在接收其他client*/
int flag = 1;
/*得到socket嵌套字*/
SOCKET server;
/*定义发送消息的长度*/
int sdMsgLen;
/*启动windows的socket服务*/
WSADATA wsaData;//Windows sockets DLL版本信息
WSAStartup(0x101,&wsaData);
char *CloseClient = "bye";
char* CloseC_S = "byebye";

/*定义receive数据长度*/
int receive;
int len;
/*创建服务器*/
struct sockaddr_in serveraddr;
/*创建客户端*/
struct sockaddr_in addrClient;
/*将serveraddr置零*/
memset((void*)&serveraddr,0,sizeof(serveraddr));
/*定义家族协议*/
serveraddr.sin_family = AF_INET;
/*定义主机地址*/
serveraddr.sin_addr.s_addr = inet_addr(argv[1]);//);"192.168.1.100"
/*定义主机端口*/
serveraddr.sin_port = htons(PORT);
/*得到socket嵌套字*/
server = socket(AF_INET,SOCK_STREAM,0);
/*返回值为-1,未启动windows的socket服务*/
if(server==-1)
{
perror("socket error!");
}
/*绑定成功返回0*/
if(bind(server,(struct sockaddr *)&serveraddr,sizeof(serveraddr)) == -1)
{
perror("不能进行绑定!");
exit(1);
}
/*定义客户端嵌套字*/
SOCKET client;
/*进入监听客户端连接和监听客户端发送的消息*/
while(1)
{
/*定义并初始化接收数据的存储*/
char receiveBuffer[MAXDATA] = "\n";
/*定义并初始化发送数据存储*/
char sendBuffer[MAXDATA] = "\n";
/*采用异步发送消息*/
bool sendFlag = false;
/*监听客户端*/
if(listen(server,20) == -1)
{
perror("不能进行监听!");
exit(1);
}
/*接收到第一个用户后将其锁定,不在接收其他用户*/
if(flag)
{
len = sizeof(struct sockaddr_in);
/*得到客户端的嵌套字*/
client = accept(server,(SOCKADDR*)&addrClient,&len);
if(client == -1)
{
perror("accept error");
continue;
}
printf("新连接: %s \n",inet_ntoa(addrClient.sin_addr));
/*创建一个消息*/
char* msg = "Hello,Connected Successfully!\n";
int len = strlen(msg);
/*得到send的返回值,返回为发送消息的长度.若发送失败则返回-1*/
int sendLen = send(client,msg,len,0) ;
if(sendLen == -1)
{
perror("消息发送失败!\n");
closesocket(client);
}
msg=0;
/*接收到第一个客户端,将其锁定*/
flag = 0;
}
/*得到接收到消息的长度*/
receive = recv(client,receiveBuffer,MAXDATA,0);
/*若消息长度为-1,则接收数据失败*/
if(receive == -1)
{
perror("接收出错!\n");
/*关闭客户端*/
closesocket(client);
}

printf("%s\n",receiveBuffer);
/*测试客户端发送的结束通话标志*/
if(strcmp(receiveBuffer,CloseClient) == 0)
{
printf("失去客户端:%s\n",inet_ntoa(addrClient.sin_addr));
flag = 1;

closesocket(client);

}
else if(strcmp(receiveBuffer,CloseC_S) == 0)
{

closesocket(server);
exit(1);
}
else
{
printf("Client %s send message : %s\n",inet_ntoa(addrClient.sin_addr),receiveBuffer);
/*当接收到消息后,服务器才可以发送消息*/
sendFlag = true;
}
while(sendFlag)
{
printf("Your Message:");
/*得到服务器输入的字符串*/
scanf("%s",sendBuffer);
sdMsgLen = strlen(sendBuffer);
/*得到服务器发送消息的长度*/
int sendLen = send(client,sendBuffer,sdMsgLen,0);
if(sendLen == -1)
{
perror("消息发送失败!");
closesocket(client);
}
/*结束服务器发送消息模式,改为接收模式*/
sendFlag = false;
}
}

return 0;
}









//客户机
#include <windows.h>
#include <stdio.h>
#include <errno.h>
#pragma comment(lib, "Ws2_32.lib")
/*定义与主机连接的端口*/
#define PORT 8888
/*定义最大传输数据量*/
#define MAXDATA 100
/*由入口函数得到需要连接主机的IP地址*/
int main(int ars,char** arg)
{
/*开启windows的socket*/
WSADATA wsaData;
WSAStartup(0x101,&wsaData);

/*定义服务器*/
struct sockaddr_in serveraddr;
/*将serveraddr清零*/
memset((void*)&serveraddr,0,sizeof(serveraddr));
/*定义家族协议*/
serveraddr.sin_family = AF_INET;
/*得到主机IP地址*/
serveraddr.sin_addr.s_addr = inet_addr(arg[1]);//);//)"192.168.1.100";
/*得到端口*/
serveraddr.sin_port = htons(PORT);
/*得到socket嵌套字*/
SOCKET s = socket(AF_INET,SOCK_STREAM,0);
/*
*建立TCP连接
*参数1:socket返回的描述符
*参数2:主机IP地址和端口号指针
*参数3:远端地质借口长度
*/
if(connect(s,(struct sockaddr*)&serveraddr,sizeof(serveraddr)) == -1)
{
perror("连接错误!");
exit(1);
}
/*进入监听服务器发送消息,采取异步通信*/
while(1)
{
/*初始化接收和发送数据的存储*/
char receiveBuffer[MAXDATA] = "\n";
char sendBuffer[MAXDATA] = "\n";
/*定发送模式*/
bool sendFlag = false;
/*如果接收数据位-1则接收错误,正确是recv返回接收到数据的长度*/
if(recv(s,receiveBuffer,MAXDATA,0)==-1)
{
perror("接收数据错误!");
exit(1);
}

printf("server %s send message: %s\n",inet_ntoa(serveraddr.sin_addr),receiveBuffer);
/*发送模式*/
sendFlag = true;
while(sendFlag)
{
char* CloseClient = "bye";
char* CloseC_S = "byebye";
/*得到输入的数据*/
printf("Your Message :");
scanf("%s",sendBuffer);
if(strcmp(sendBuffer,CloseClient) == 0)
{
send(s,CloseClient,strlen(CloseClient),0);

closesocket(s);
exit(1);
}
else{
/*得到发送数据的长度*/
int sendLen = send(s,sendBuffer,strlen(sendBuffer),0);
/*发送数据长度为-1时,发送失败*/
if(sendLen == -1)
{
perror("发送错误!");
closesocket(s);
}
}
/*发送模式结束,进入接收模式*/
sendFlag = false;
}


}
return 0;
}
...全文

相关推荐

JEP30-PX100A PartModel Product Guidelines for Electronic-Device Substrates and Assemblies – XML Requ

JEP30-PX100A PartModel Product Guidelines for Electronic-Device Substrates and Assemblies – XML Requirements

cdming

基于Matlab的自动睡眠粒状结构检测算法,从脑电信号中进行。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

海神之光

JEP375 2.5D_3D Silicon thinned wafers with Through Silicon Vias (TSV’s) and Backside Redistribution

JEP375 2.5D_3D Silicon thinned wafers with Through Silicon Vias (TSV’s) and Backside Redistribution Layer (RDL).pdf

Red Car

考虑供电可靠性与算力柔性的数据中心园区源‑储‑荷一体化规划研究(Matlab代码实现)

考虑供电可靠性与算力柔性的数据中心园区源‑储‑荷一体化规划研究(Matlab代码实现)内容概要:本文围绕“考虑供电可靠性与算力柔性的数据中心园区源-储-荷一体化规划”展开研究,提出了一种综合能源系统优化规划方法。该方法充分考虑数据中心对供电可靠性的高要求以及算力负载的灵活性特征,将电力供应、储能配置与计算负荷进行协同优化。通过建立数学模型,整合光伏发电、储能系统与数据中心负荷调度,利用Matlab代码实现优化求解,旨在提升能源利用效率、降低运营成本并增强系统韧性。研究涵盖了对新能源出力不确定性、负荷波动以及储能动态行为的建模与仿真分析,最终验证了所提一体化规划方案在提高供电可靠性和实现算力资源柔性调度方面的有效性。; 适合人群:具备一定电气工程、能源系统或计算机科学背景,从事数据中心、智能电网、综合能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 为数据中心园区的绿色低碳与高可靠运行提供规划设计方案;② 实现可再生能源的高效消纳与储能系统的优化配置;③ 探索算力作为柔性负荷参与电力系统互动的潜力,支撑新型电力系统建设。; 阅读建议:此资源以Matlab代码为核心,辅以理论模型,建议读者在理解基本原理的基础上,动手运行和调试所提供的代码,通过修改参数和场景设置来深入掌握一体化规划的优化逻辑与关键技术细节。

@橘柑橙柠桔柚

歌曲爆款传播预测数据集10000首曲目Spotify音频特征机器学习

本数据集为合成音乐数据,包含2010至2025年间10000首曲目的Spotify风格音频特征与明确的爆款(viral)目标标签。现有音乐数据集常缺少可用建模目标或存在授权限制,本数据集提供了干净、字段完整、可直接用于监督学习的基准语料。字段涵盖节奏、能量、可舞性、声学度、效价等音频属性,以及曲目元数据与年份信息,目标列viral基于传播表现定义,可直接用于二分类建模。适合开展爆款歌曲预测、音频特征与传播关系分析、年代音乐风格演变可视化、特征重要性排序等分析任务,也可作为分类、回归与特征工程教学的演示数据。数据结构清晰、无缺失值,适合数据科学课程、音乐媒体分析与推荐算法原型验证使用。

licy__
评论 2
收藏 已收藏
分享
返回顶部
qq_37851694
进程/线程/DLL 15,465 成员 49,169 内容