我对插座知之甚少但到目前为止我没有太大的问题.我实际上坚持如何知道对方何时完成发送消息.到目前为止我所拥有的是服务器端的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");
Run Code Online (Sandbox Code Playgroud)
因此,在客户端,我发送一个"hello world"消息,该消息实际上显示在服务器控制台上,但它不会打印"读取完成"消息,因此我认为它会等待另一条消息.
我认为当没有其他内容可读时,read函数会返回0,但我想情况并非如此
那么,我做错了什么?
实际上,在阅读了你的答案并仔细阅读了代码之后,我意识到这就是协议的用途.
当一方已经完成并且另一方应该开始写作时,我应该事先知道.也许添加一个最后一个字符,让我知道我已完成发送,或者为邮件添加前缀大小.
谢谢你的回答.
您的样本期望read()返回0,这将在客户端关闭连接时发生.如果必须保持连接打开但知道消息结束的位置,则可以为每条消息添加其长度前缀,或者在末尾添加消息结束标记.套接字API中没有任何内置功能可以帮助您.
| 归档时间: |
|
| 查看次数: |
2446 次 |
| 最近记录: |