当我使用GCDasyncsocket从服务器(java)获取套接字消息时,它适用于ios模拟器(xcode 6,iphone6 +);但是当我使用我的iphone6 +将其连接到测试时,它会在收到大数据时丢失数据,详情如下 我向服务器发送请求并得到3个答案 服务器回答长度的第一个数据是9,并且接收9 第二个是149,收到149 服务器回答的最后一个数据是:2912,但代码显示为1448, 我在下面的代码中得到了1448:
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag {
NSLog(@"receive datas from method 1");
NSLog(@"Data length = %d",[data length]);
...
当我深入时,gcdasyncsocket中的代码显示相同的代码
if (currentRead->bufferOwner)
{
// We created the buffer on behalf of the user.
// Trim our buffer to be the proper size.
[currentRead->buffer setLength:currentRead->bytesDone];
result = currentRead->buffer;
NSLog(@"if %lu %lu",(unsigned long)currentRead->bytesDone,(unsigned long)result.length);
}
它在模拟器中运行良好,但在真正的手机中出错了;我也在iphone4s上测试,大多数时候都运行良好~~~~~~~~~~ 有多奇怪!
任何人都可以给我一些建议吗?
答案 0 :(得分:0)
我有理由;这是协议拆分消息; 我使用该方法发送消息的长度,告诉协议如何拆分它; 此外,还有一些其他解决方案可以解决它;
之后,我还发现该协议会合并一些消息,所以,当你试图解决它时,你不能只考虑分裂情境!