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