c - TCP:套接字发送/接收顺序
问题描述
我想知道您是否需要设置服务器和客户端套接字,以便它们始终运行
send recv send recv ...
因为我在发送消息时遇到问题,然后最初的 send() 会收到两次。
我发送消息upload foo.c
服务器显示:Message received: upload foo.c
但是随后服务器会打印实际的文件内容,这些内容应该已经传递给另一个recv()
套接字调用(因为只有 while 循环中的第一个套接字才打印了它的内容)
Message received: This is some text from
the file foo.c
text hello ending
所以我觉得它“溢出”到了下一个 recv 迭代中。
解决方案
我猜你使用TCP?然后你必须记住 TCP 是一个流协议,没有消息边界,没有任何开始或结束(除了连接建立和关闭)。
单个recv
呼叫可能会收到比单个呼叫中发送的更少或更多的信息send
。
您需要提出一个更高级别的协议,该协议明确包含消息边界,例如通过发送要接收的数据的长度。然后你必须使用循环来接收正确数量的字节。
推荐阅读
- ms-access - 子窗体中的“DoCmd.GoToRecord”作用于窗体和子窗体
- java - 使用JSoup将android中的href值更改为本地值
- bash - 从更大的列表中创建 4 个元素的所有组合
- android - 为什么某些应用程序风格中没有出现无崩溃统计信息?
- javascript - 当计算本身返回一个数字时,为什么我的得分获取器评估为 NaN?
- python - Python Pandas:使用相同的类别名称(在一列中)和 NaN(在另一列中)填充数据框
- php - PHP - RegEx - 查找开头和结尾相同的单词
- jsf - primefaces fileUpload 是否可以不显示文件详细信息但显示总进度条?
- objective-c - 为什么我不能在 NSMutable 字典中设置对象
- c++ - 尝试将我的单个 Visual Studio 2010 C++ 项目构建为 exe 和 DLL,而不是再次创建新项目