是否可以使用AsyncSocket执行以下操作:
while(“未读取响应数据包”)执行{
}
这是我目前使用的AsyncSocket:
我正在通过套接字使用AsyncSocket编写数据:
[_socket writeData:request withTimeout:commandData tag:commandTag];
并在我的委托类中接收回调:
onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
问题是,数据流中没有终止字符,并且区分“响应数据包”的长度的唯一方法是读取并解析它们的前5个字节,并使用它来将数据切割成“数据包”并进行回调我的代表目前,我正在使用AsyncSocket,如上面的代码片段所示,并且一些回调“onSocket:didReadData:withTag:”已经是良好的长度数据包(收到NSData),但有些是合并的。恕我直言,我需要明确告诉AsyncSocket在阅读时如何解释并将未来数据切割成数据包。
答案 0 :(得分:1)
找到解决方案。你需要在AsyncSocket委托方法中调用onSocket:didWriteDataWithTag:
- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag {
...
[sock readDataToLength:<preferred size of response packet> withTimeout:myTimeout tag:tag];
//instead of
//[sock readDataWithTimeout:myTimeout tag:tag];
}
这样你就可以定义何时调用onSocket:didReadData:withTag:。