0

使用 NSInputStream 时遇到问题。我有连接到服务器的客户端应用程序,然后服务器将开始通过 TCP 重复向我的客户端应用程序发送消息,大约每秒 1 条消息。服务器只是向客户端广播消息,消息是 xml 格式。服务器将消息作为一个数据包发送。

现在的问题是,当我从 NSInputStream 读取字节时,数据被截断,这意味着我不时收到 2 个单独的数据(部分 xml)响应,而不是接收 1 个完整的消息。我无法调试,因为当我从 NSInputStream 读取数据字节时它已经发生了。

我使用 Wireshark 分析我收到的每个数据包,当它发生时数据也被截断,因为 TCP 将部分数据重新传输到我的客户端。我试图记录每个部分数据字节,部分数据的总和始终在 1600 字节左右。

我不知道他们是如何设计和实现服务器端的,但我知道有很多人连接到该服务器并不断从中获取广播消息。

有人遇到这个问题吗?任何人都可以帮忙吗?数据是否可能超过最大大小并被拆分?

4

1 回答 1

1

这本身不是问题。它是 TCP 设计的一部分,也是NSInputStream. 您可能会收到部分消息。处理这个事实是你的工作,等到你收到完整的消息,然后处理完整的消​​息。

1600 字节有点奇怪。我希望 1500 字节,因为这是最大的合法以太网数据包(或者特别是 1472 左右的某个地方,这是一个非常常见的 MTU,减去一些用于标头)。或者由于缓冲在NSInputStream. 但这些都不重要。您必须处理这样一个事实,即您不一定会在其边界处收到消息。

于 2013-01-10T01:27:19.983 回答