2

我正在编写 C++ 套接字代码,我需要一些帮助!在我的程序中我不知道消息的大小,它可能会发送文件的一部分或它自己的文件,文件可能是一个巨大的文件,所以我应该指定数据包的最大大小,应该如果超过最大值,我将其划分为多个?

4

2 回答 2

9

使用时考虑“数据包”和“消息”永远不会有建设性,TCP因为:

  • 网络引擎有自己的方法来决定最佳分段大小
  • 段大小对应用程序代码没有影响:接收 TPC 在将数据传递给接收进程之前可以自由合并段

您应该按照设计的方式查看 TCP:按顺序可靠的字节流服务。因此,只需编写足够大的块,引擎及其无数规则就会处理它。

于 2012-08-20T17:06:53.943 回答
2

这个问题有点模糊,但这种方法似乎是普遍的。发送器应该发送接收器应该期望多少字节的指示。接收者应该期望看到这个指示,然后准备接收那么多字节。

就数据包大小而言,应用程序本身通常不关心字节在网络上的传递方式,但应用程序可能关心不调用sendrecv系统调用的次数过多。这在并发服务器上尤为重要,因为效率是可伸缩性的关键。因此,您需要一个足够大的缓冲区以避免进行过多的系统调用,但又不能大到导致您长时间阻塞以等待数据流入内核缓冲区。匹配发送/接收套接字缓冲区大小通常就足够了,但这取决于其他因素,例如网络的带宽和延迟,接收器消耗数据的速度,以及您希望每个连接允许的时间片在并发期间处理。

于 2012-08-20T17:11:29.733 回答