如何知道套接字何时完成读取

时间:2010-11-09 02:11:12

标签: c sockets

我对插座知之甚少,但到目前为止我没有太大的问题。我实际上坚持如何知道对方何时完成发送消息。到目前为止我所拥有的是服务器端的while循环,它从套接字读取直到没有任何东西(或者应该这样做)。这是代码:

char c[1024]; //buffer
inst much;
while(much = read(sockfd, &c, 1024) > 0) {
   printf("read %d, clientSays> %s\n", much, c);
}
printf("reading, finished\n");

因此,在客户端,我发送一个“hello world”消息,该消息实际显示在服务器控制台上,但它不会打印“读取完成”消息,因此我认为它会等待另一条消息。

我认为当没有其他内容可读时,读取函数会返回0,但我想情况并非如此

那么,我做错了什么?


更新

实际上,在阅读了你的答案并仔细阅读了代码之后,我意识到这就是协议的用途。

当一方已经完成发送以及另一方应该开始写作时,我应该事先知道。也许添加一个最后一个字符,让我知道我已完成发送,或者为邮件添加前缀大小。

感谢您的回答。

2 个答案:

答案 0 :(得分:7)

您的示例期望read()返回0,这将在客户端关闭连接时发生。如果必须保持连接打开但知道消息结束的位置,则可以为每条消息添加其长度前缀,或者在末尾添加消息结束标记。套接字API中没有任何内置功能可以帮助您。

答案 1 :(得分:1)

我知道这是一种有点伤心/低效的方法,但是当天我用char分隔符知道何时停止读取套接字。

用手盖住