TCP:连续多条消息

时间:2012-07-09 08:34:41

标签: tcp

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

3 个答案:

答案 0 :(得分:1)

TCP提供有序字节流传递服务。字节不会以另一个顺序到达,但写入次数不必等于读取次数。

  • 您永远不会读取其他订单中的字节数,而不会读取发送时的字节数
  • 你不能对“消息”做出任何假设。 TCP不知道消息,只知道字节(见上文)。发件人和收件人都可以合并和拆分此类“邮件”

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我同意@cnicutar。

您如何反序列化对象?我怀疑那里存在问题。

例如,如果您的消息是

ABCD后来PQR跟踪了200分钟。它可能显示为:

  • ABC后跟PQR
  • ABCDPQR
  • 甚至AB后跟CD,然后是PQ,后跟R

基本上,您无法根据接收数据的时间做出假设

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

如果您使用的是Java,则可以使用ObjectInputStream& ObjectOutputStream并且不会对序列化问题感到困扰。

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