【发布时间】:2014-04-25 05:11:06
【问题描述】:
我在将整数从服务器传递到客户端的 read() 语句中遇到问题。问题是我可以很好地向服务器发送 2 个整数,但由于某种原因,客户端无法从服务器接收除 0 以外的任何内容。有人可以向我解释一下这个 while 循环到底发生了什么吗?这似乎是 C 套接字中的标准做法,但我无法弄清楚它真正完成了什么(如果有的话)。
memset(rbuffer,0,sizeof(rbuffer));
while ( (n = read(sockfd, rbuffer, sizeof(rbuffer))) > 0)
{
rbuffer[n] = 0;
}
这是客户端的读取尝试,其中 rbuffer 应该接受单个整数。它似乎尝试从服务器反复读取(接收 n > 0 直到服务器关闭套接字),其中在套接字关闭之前的最后一次读取实际上保存了数据,因此,rbuffer 设置为 0 直到完成,它然后用来自服务器的数据填充。
服务器端发送给客户端的代码如下所示:
int g = dijkstra(source, destination, numNodes);
printf("The value sent to client is %d.\n", g);
write(connfd, g, sizeof(g));
close(connfd);
sleep(1);
原始代码显示为:
int g = dijkstra(source, destination, numNodes);
sprintf(sendBuff,"%d", g);
write(connfd, sendBuff, strlen(sendBuff));
close(connfd);
sleep(1);
但我想在客户端将其读取为整数,因此我删除了 sendBuff,因为在发送 int 时似乎没有必要,考虑到 g 已经设置。
感谢您的帮助。我想要的是更好地理解 C 中 TCP 套接字的服务器到客户端通信,特别是 read 需要等待服务器响应,还是已经这样做了?另外,去掉读取的while循环没有任何效果,服务器对*buffer的响应仍然为0。
【问题讨论】: