我正在编写c ++套接字代码,我需要一些帮助! 在我的程序中,我不知道消息的大小是多少,它可能会发送文件的一部分或者它自己的文件,文件可能是一个巨大的文件,所以我应该指定数据包的最大大小,如果超过最大值,我将它除以一个以上?
答案 0 :(得分:9)
使用TCP
时考虑“数据包”和“消息”从来没有建设性,因为:
您应该按照设计的方式查看TCP:可靠的 bytes-stream 服务。因此,只需编写足够大的块,引擎及其无数的规则就可以解决它。
答案 1 :(得分:2)
问题有点模糊,但这种做法似乎具有普遍性。发送器应发送接收器应该预期的字节数的指示。接收方应该期望看到这个指示,然后准备接收那么多字节。
就数据包大小而言,通常应用程序不担心网络本身如何传递字节,但应用程序可能不关心不调用send
和recv
系统调用太多倍。这对于并发服务器尤其重要,因为效率是可伸缩性的关键。因此,您需要一个足够大的缓冲区,以避免进行太多的系统调用,但不要太大,以至于导致您长时间阻塞等待数据流入内核缓冲区。匹配send / recv套接字缓冲区大小通常就足够了,但它取决于其他因素,例如网络的带宽和延迟,以及接收器耗尽数据的速度,以及您希望每个连接允许的时间片在并发期间处理。