0

我在套接字编程中为计算引擎编写了一个服务器程序,它显示客户端给出的数字的平均值。我的客户代码:

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));

该程序不起作用。如果我删除服务器中的写入,那么它正在工作。如果我只是从服务器向客户端发送一个示例消息,删除所有计算,那么它就可以工作。谁能告诉我错误是什么

4

1 回答 1

0
  1. 协议错误。客户端正在写入一个数字,但服务器正在读取无数个数字。您需要(a)将服务器更改为读取一次,(b)提前发送要读取的数字数量,或者(c)在写入数字之后和读取响应之前关闭客户端套接字以进行输出。

  2. 您在另一个方向有类似的协议错误。服务器正在写一个响应,但客户端一直在循环。服务器必须在写完回复后关闭套接字。

  3. 需要在服务器的 read() 后面加上 `buff[rfd] = 0',否则 sscanf 不知道停在哪里。

于 2012-10-01T23:37:12.503 回答