GCDAsyncSocket丢失数据

时间:2014-11-13 02:58:34

标签: ios sockets gcdasyncsocket

当我使用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上测试,大多数时候都运行良好~~~~~~~~~~ 有多奇怪!

任何人都可以给我一些建议吗?

1 个答案:

答案 0 :(得分:0)

我有理由;这是协议拆分消息; 我使用该方法发送消息的长度,告诉协议如何拆分它; 此外,还有一些其他解决方案可以解决它;

之后,我还发现该协议会合并一些消息,所以,当你试图解决它时,你不能只考虑分裂情境!