Ios GCDAsyncSocket丢失数据
当我使用GCDasyncsocket从服务器(java)获取套接字消息时,它在ios模拟器(xcode 6,iphone6+)中工作;但当我使用iphone6+连接它进行测试时,当它接收到大数据时会丢失数据,详情如下 我向服务器发送一个请求,得到3个答案 服务器应答长度的第一个数据为9,并接收9 第二个是149,接受149 服务器回答的最后一个数据是:2912,但代码显示为1448, 我得到了以下代码中的1448: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
-(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上测试过,大多数时候都很好用~~~~~~~~~~
真奇怪
有人能给我一些建议吗?我知道原因;协议对消息进行拆分; 我使用发送消息长度的方法来告诉协议如何拆分它; 此外,还有其他一些解决方案
在那之后,我还发现该协议将合并一些消息,因此,当您试图解决它时,您不能只考虑拆分情况!如果您使用分隔符读取数据,那么请交叉检查您的服务器数据是否与分隔符的数据字节完全相同。这会导致客户端在第一次出现分隔符数据块时终止读取字节;它是对消息进行拆分的协议;我用一种方法告诉服务器我的信息长度来解决这种情况