我正在尝试以固定的时间间隔(每秒)通过TCP套接字发送消息。有时不会发送完整的消息,或者会将2-4条消息堆叠在一起并立即发送。我有if语句来判断返回值是否为0或< 0,但这些语句从来都不是真的。我尝试了一种显而易见的方法,即检查send()的确切返回值,看看发送的字节是更少还是更多。它只返回我在要发送的参数中指定的数字(即使发送的字节较少,这在发送之前阻塞的情况下也是有意义的)。那么,有没有一种准确的方式来说“发送的数据包大小合适吗?不是吗?-做点什么”?
发布于 2011-08-01 23:05:09
TCP提供了可靠的字节流,没有消息边界。如果您需要知道消息的长度,则必须将其构建到协议中,例如:使用指定消息长度的2字节头发送每条消息。
发布于 2011-08-01 22:59:18
TCP没有这样的功能。如何将TCP流分割为数据包取决于内核中的网络堆栈。话虽如此,你可以在你的套接字上设置选项来禁用Nagle algorithm。
发布于 2011-08-01 22:58:59
如果我没有理解错的话,有时你发送两个或更多的数据包,它们在远端作为一个数据包被接收。
这就是TCP/IP的本质。您不能保证数据包将以不同的方式到达,只保证它们将按顺序和可靠地到达。
https://stackoverflow.com/questions/6900273
复制相似问题