【发布时间】:2012-10-02 07:37:12
【问题描述】:
我在套接字编程中为计算引擎编写了一个服务器程序,它显示客户端给出的数字的平均值。 我的客户代码:
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));
程序不工作。如果我删除服务器中的写入,那么它正在工作。 如果我只是从服务器向客户端发送一个示例消息,删除所有计算,那么它就可以工作。 谁能告诉我是什么错误
【问题讨论】:
-
一个问题是您没有终止收到的字符串。发送
strlen(...) + 1字节或显式终止您收到的字符串。 -
当客户端发送完号码后,服务器中的
read()将被阻塞。即,它不会返回。read()只会在套接字关闭后返回。因此,您的客户端应该先发制人地告诉服务器需要多少数字。 -
客户端程序必须接受输入,直到用户提供--。所以我正在检查那个条件。