合并数据/ IP数据包

合并数据/ IP数据包

问题描述:

我应该从服务器获取一些XML数据说,合并数据/ IP数据包

 <?xml><a></a><?xml><a></a><?xml><a></a><?xml><a></a> 

假设数据包按以下顺序接收

 <?xml><a> 
    </a><?xml><a></a><?xml> 
    <a></a> 

如何我能制定解析这种数据的逻辑吗?

简而言之,您不需要担心订单; TCP为您处理重组。

TCP是一种流媒体协议,每个数据包都包含一个序列号,允许网络堆栈以正确的顺序重新组合传入的数据包。它还会自动重新发送任何在传输过程中丢失或损坏的数据包。但是,与UDP一次传输完整消息不同,TCP只是在连接关闭之前一直发送数据,而没有协议级别的单个消息概念。

我认为你的问题不是关于排序,而是关于什么时候你已经收到所有的数据。通常有两种方法可以解决这个问题。

首先,服务器可以在发送完数据后关闭连接。客户端发出请求,累积响应,直到连接关闭,然后将收到的所有数据传递给应用程序。其次,应用程序可以通过标记每个消息的结尾或在每个消息的开头插入一个字节数来构造数据本身。接收方等待指定数量的字节到达并传递给应用程序。

实际上还有第三种方法,但它很容易出错并且通常被认为是不好的做法:客户端可以等到它停止接收数据一段时间,假设超时指示消息结束。但是,当客户端等待超时时,这可能会造成不必要的延迟,并且如果网络中存在大量延迟,它也可能过早地指示消息结束。如果服务器在消息中“消失”,您应该将其视为一种防故障功能,防止客户端挂起,或者如果其他方法均不起作用,则可以将其作为最后的手段。但它很有可能会间歇性地失败,所以不要告诉任何人你从我那里听到了。 :-)

祝你好运!