Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios GCDAsyncSocket丢失数据_Ios_Sockets_Gcdasyncsocket - Fatal编程技术网

Ios GCDAsyncSocket丢失数据

Ios GCDAsyncSocket丢失数据,ios,sockets,gcdasyncsocket,Ios,Sockets,Gcdasyncsocket,当我使用GCDasyncsocket从服务器(java)获取套接字消息时,它在ios模拟器(xcode 6,iphone6+)中工作;但当我使用iphone6+连接它进行测试时,当它接收到大数据时会丢失数据,详情如下 我向服务器发送一个请求,得到3个答案 服务器应答长度的第一个数据为9,并接收9 第二个是149,接受149 服务器回答的最后一个数据是:2912,但代码显示为1448, 我得到了以下代码中的1448: -(void)socket:(GCDAsyncSocket *)sock did

当我使用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上测试过,大多数时候都很好用~~~~~~~~~~ 真奇怪


有人能给我一些建议吗?

我知道原因;协议对消息进行拆分; 我使用发送消息长度的方法来告诉协议如何拆分它; 此外,还有其他一些解决方案


在那之后,我还发现该协议将合并一些消息,因此,当您试图解决它时,您不能只考虑拆分情况!

如果您使用分隔符读取数据,那么请交叉检查您的服务器数据是否与分隔符的数据字节完全相同。这会导致客户端在第一次出现分隔符数据块时终止读取字节;它是对消息进行拆分的协议;我用一种方法告诉服务器我的信息长度来解决这种情况