我正在为与 Python Twisted 后端接口的 iPhone 应用程序编写一些网络代码。我最近遇到了一个问题,看起来好像我的 NSOutputStream 在发送时将有效负载加倍,或者在接收时将有效负载加倍。
我正在使用 TCP 套接字的“Apple 推荐”样式,例如非轮询。
过程如下:
CLIENT
- NSStreamEventHasSpaceAvailable:发送一个 X 字节数据包
- NSStreamEventHasSpaceAvailable:发送另一个 Y 字节数据
SERVER
- Twisted 接收大小为 (X + Y) 字节的数据包
如果 outputStream 的状态是“NSStreamStatusWriting”,我确保我明确不发送数据。如果没有抛出 NSStreamEventHasSpaceAvailable ,还要确保不允许从客户端发送数据。
关于什么可能导致有效载荷的这种双重/合并的任何想法?Twisted 代码相当简单,使用我的协议中的标准 dataReceived:
def dataRecieved(自我,数据): # 做逻辑以决定如何处理数据 # ... # print of len(data) here显示合并的数据包大小
iOS 代码也相当标准:
如果(事件代码 == NSStreamEventHasSpaceAvailable) { [outputStream write:[packet getData] maxLength:[packet getPacketSize]]; } // [packet getData] 只返回一个标准的 UInt8 数组。 // [packet getPacketSize] 返回该数组的大小。
当上述 iOS 代码连续调用两次(例如,一个接一个地发送两个数据包)时,扭曲的代码会报告合并后的数据大小。
提前感谢您的任何意见或建议。