我正在创建一个TCP服务器。我听说你不能总是指望用一个Read读取所有数据,即使它是用一个Write发送的。该协议可能会破坏它。我的问题是,只是为了巨大的数据包,它甚至会打破1kb? 500bytes?尺寸安全吗?
答案 0 :(得分:2)
您永远不会指望一次读取所有数据。你可以通过设置一个小的MTU来任意分解包。
答案 1 :(得分:1)
使用TCP套接字时,不控制发送的“数据包”。您只需向/从套接字写入/读取字节,协议控制传输的方式和时间。
对方愿意在任何时间接收的数据量实际上是最大值。这被称为“Maximum segment size”。你无法知道这有多大,因为它是由你正在与之交谈的人决定的。它们可能只允许您以最多1k段或仅500字节段发送数据。没有办法知道,除非你可以控制两端。
此外,您写出的字节不仅可以分割成更小的段,而且实际上可以将多个小写组合在一起形成一个更大的段。请参阅Nagle's algorithm。