0

是否在 TCP 标准中,连续从服务器发送到客户端的多条消息将被客户端以相同的顺序接受(并且一条消息的字节不会分散在其他消息中)?

4

3 回答 3

1

TCP 提供了一种有序的字节流传送服务。字节不会以其他顺序到达,但写入次数不必等于读取次数。

  • 您永远不会以不同于发送它们的顺序读取字节
  • 您不能对“消息”做出任何假设。TCP 不知道消息,只知道字节(见上文)。发送者和接收者都可以合并和拆分这样的“消息”
于 2012-07-09T08:36:13.573 回答
0

TCP 使用序列号来标识数据的每个字节。序列号标识了从每台计算机发送的字节的顺序,以便可以按顺序重构数据,而不管传输过程中可能发生的任何碎片、无序或丢包。

于 2012-07-09T08:40:18.350 回答
0

我同意@cnicutar。

你是如何反序列化对象的?我怀疑问题出在那儿。

例如,如果您的消息像

ABCD200 毫秒后是PQR. 它可能显示为:

  • ABC其次是PQR
  • 或者ABCDPQR
  • 甚至AB紧随其后,CD紧随 PQ其后 R

基本上你不能根据接收数据的时间做出假设

反序列化逻辑应该知道字节流中的对象边界。此信息应由序列化逻辑编码到流中。

如果您使用的是 Java,则可以使用ObjectInputStream&ObjectOutputStream而不会被序列化问题所困扰。

J2ME Polish有一个很好的序列化实用程序,可以很容易地移植到其他平台。我自己在现场环境中使用过它。

于 2012-07-09T10:07:09.477 回答