我在套接字编程中编写计算引擎的服务器程序,显示客户端给出的数字的平均值。 我的客户代码:
main()
{
//socket
//connect
gets(msg);
f=sscanf(msg,"%f",&num);
write(sockfd,msg,strlen(msg));
while ((n1=read(sockfd,result,Z))>0) {
write(1,result,n1);
}
}
在服务器中:
while((rfd=read(sockfd,buff,Z))>0) {
sscanf(buff,"%f",&num);
sum=sum+num;
}
sum=sum/n;
snprintf(res,Z,"%f",sum);
write(sockfd,res,strlen(res));
该计划无效。如果我删除写入服务器然后它正在工作。 如果我只是从服务器发送一个示例消息到客户端删除所有计算然后它的工作原理。 谁能告诉我错误是什么
答案 0 :(得分:0)
协议错误。客户端正在写一个号码,但服务器正在读取无数个号码。您需要(a)将服务器更改为一次读取,(b)提前读取要读取的数字的数量,或者(c)在写入数字之后和读取响应之前关闭客户端套接字以进行输出。
您在另一个方向上有类似的协议错误。服务器正在编写一个响应,但客户端正在永远循环。写入回复后,服务器必须关闭套接字。
你需要在服务器中的read()之后添加`buff [rfd] = 0',否则sscanf不知道在哪里停止。