Recv读取不完整数据包
recv reads incomplete packet
我有一个简单的函数,负责通过套接字接收数据包。
if((recv_size = recv(sock , rx , 50000 ,0)) == SOCKET_ERROR)
{
...
} else
{
...
}
我发现有时我收到不完整的包。为什么?也许我应该多次使用recv
?报文长度不能超过50000字节。
如果您使用TCP,这是预期的。TCP是一个流协议,它没有"数据包"或消息边界,您可以接收所有的"消息"或部分消息,甚至多个消息。因此,您可能需要多次调用recv
来接收完整的消息。
然而,由于TCP没有消息边界,你必须在TCP之上自己实现它们,例如通过在固定大小的头中发送消息长度,或者使用一些特殊的消息结束标记。
相关文章:
- 如何反转整数参数包
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何使用发送数据包所花费的时间计算两个节点之间的距离?
- 发送固定大小的 UDP 数据包
- pcap_handler回调仅在使用 NPCAP v0.9991 时包含空数据包
- 在 c++ 中解析数据包数据的最佳方法是什么?
- 接受函数在发送数据包时等待
- 如何在 omnet++ 中发送自定义数据包?
- 整数数据如何以位为单位存储在内存中?不是右对齐吗?
- 数据包访问实践
- 在C++中创建一个简单的数据包路由器,如何跟踪"客户端"?
- 德拉吉诺 LG01-S 收到异常数据包并停止工作
- 将数据包从C++服务器发送到NodeJs服务器时出现MessagePack解码错误
- 使用C++将UDP数据包存储在Structure中
- FFmpeg av_read_frame从音频流返回数据包
- 为什么操作系统正在更改我的数据包的指定传出端口
- 什么是 16 字节有符号整数数据类型?
- 是否可以将多个结构作为一个数据包存储在一个函数中,然后传递给其他函数并在那里提取?
- recvfrom 只收到几个数据包,之后它进入等待状态
- 如何调试由 C++ 编写的 npm 数据包