客户端的read()失败C

时间:2014-04-25 05:11:07

标签: c sockets client

我在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套接字的服务器到客户端通信,特别是读取需要等待服务器响应,还是已经这样做了?另外,删除while循环以进行读取无效,对于* buffer,响应仍然是来自服务器的响应。

1 个答案:

答案 0 :(得分:0)

你不能使用write(connfd, g, sizeof(g));write函数期望一个char指针作为第二个参数,你给它一个int。毫无疑问,您的原始客户端可能还需要一个字符串,用字符填充rbuffer,并添加结束零(rbuffer[n] = 0)以便能够将其用作提取整数的字符串。你可能在客户端有一个sscanf()。

字面试图做的是

write(connfd, (char*)&g, sizeof(g));

并且可以接受它,之后,g为int

g = *((int*)rbuffer);

但我不应该提出这个,因为它不是正确的代码......