我对插座知之甚少,但到目前为止我没有太大的问题。我实际上坚持如何知道对方何时完成发送消息。到目前为止我所拥有的是服务器端的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,但我想情况并非如此
那么,我做错了什么?
实际上,在阅读了你的答案并仔细阅读了代码之后,我意识到这就是协议的用途。
当一方已经完成发送以及另一方应该开始写作时,我应该事先知道。也许添加一个最后一个字符,让我知道我已完成发送,或者为邮件添加前缀大小。
感谢您的回答。
答案 0 :(得分:7)
您的示例期望read()
返回0,这将在客户端关闭连接时发生。如果必须保持连接打开但知道消息结束的位置,则可以为每条消息添加其长度前缀,或者在末尾添加消息结束标记。套接字API中没有任何内置功能可以帮助您。
答案 1 :(得分:1)
我知道这是一种有点伤心/低效的方法,但是当天我用char分隔符知道何时停止读取套接字。
用手盖住