使用NSInputStream时出现问题。 我有连接到服务器的客户端应用程序,然后服务器将开始通过TCP重复向我的客户端应用程序发送消息,每秒约1条消息。服务器只是向客户端广播消息,消息是xml格式。服务器将消息作为一个数据包发送。
现在的问题是,当我从NSInputStream读取字节时,数据被截断,这意味着不是接收1个完整的消息,而是我不时地响应2个单独的数据(部分xml)。我无法调试,因为当我从NSInputStream读取数据字节时已经发生了。
我使用Wireshark来分析我收到的每个数据包以及何时发生数据也被截断,因为TCP因此部分数据重新传输到我的客户端。 我试图记录每个部分数据字节,部分数据总和总是在1600字节左右。
我不知道他们是如何设计和实现服务器端的,但我知道有很多人连接到该服务器并不断从中获取广播消息。
有没有人遇到这个问题?有人可以帮忙吗?数据是否可能超过最大大小并被分割?
答案 0 :(得分:1)
这本身不是问题。它是TCP和NSInputStream
设计的一部分。您可能会收到部分消息。处理这个事实是你的工作,等到收到完整的消息,然后处理完成的消息。
1600字节有点奇怪。我希望1500字节,因为那是最大的合法以太网数据包(或者特别是在1472左右,这是一个非常常见的MTU,减去一些标题)。或者由于NSInputStream
中的缓冲,我可能会期望1k或4k的倍数。但这些都不重要。你必须处理这样一个事实,即你不会在它们的边界上得到消息。