Objective c AsyncSocket:如何定义读取长度并仅在达到读取长度时获取回调
是否可以使用AsyncSocket执行以下操作:Objective c AsyncSocket:如何定义读取长度并仅在达到读取长度时获取回调,objective-c,ios,sockets,asyncsocket,Objective C,Ios,Sockets,Asyncsocket,是否可以使用AsyncSocket执行以下操作: [_socket writeData:request withTimeout:commandData tag:commandTag]; 而(“响应包”未被读取)则{ 从读取流中读取至少前5个字节,并从中提取“响应包”长度大小 进一步读取,直到达到“响应数据包”标头中定义的字节读取量 如果到达读取流的末尾,但缺少一些字节,则等待另一个读取流并完成“响应包”的读取,然后 将读取的字节复制到缓冲区,并将读取的数据标记为“响应包”数据 使用该数据在so
[_socket writeData:request withTimeout:commandData tag:commandTag];
而(“响应包”未被读取)则{
[_socket writeData:request withTimeout:commandData tag:commandTag];
我正在使用AsyncSocket通过socket编写数据:
[_socket writeData:request withTimeout:commandData tag:commandTag];
并在我的委托类中接收回调:
onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
问题是,数据流中没有终止字符,区分提交“响应数据包”长度的唯一方法是读取和解析前5个字节,并将其用于将数据切割成“数据包”并回调我的代理。目前,我正在使用AsyncSocket,如上面的代码片段所示,一些回调“onSocket:didReadData:withTag:”已经是很长的数据包(接收到的NSData),但有些已经合并。IMHO我需要明确地告诉AsyncSocket如何在读取时解释并将传入的数据切割成数据包。找到了解决方案。您需要在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];
}
-(void)onSocket:(AsyncSocket*)sock didWriteDataWithTag:(long)标记{
...
[sock readDataToLength:withTimeout:myTimeout标记:标记];
//而不是
//[sock readDataWithTimeout:myTimeout标记:标记];
}
通过这种方式可以定义何时调用onSocket:didReadData:withTag:。找到了解决方案。您需要在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];
}
-(void)onSocket:(AsyncSocket*)sock didWriteDataWithTag:(long)标记{
...
[sock readDataToLength:withTimeout:myTimeout标记:标记];
//而不是
//[sock readDataWithTimeout:myTimeout标记:标记];
}
通过这种方式,您可以定义何时调用onSocket:didReadData:withTag:。嘿,您知道如何确定响应数据包的大小吗?或者我应该假设一下尺寸?谢谢你知道如何确定响应包的大小吗?或者我应该假设一下尺寸?谢谢