现在我向服务器发送一个图片数据,采取分包发送。客户端用for循环,向服务器发送包,但是服务器端只接收到部分数据,丢包现象很严重,难道是客户端这边发送的太快了?求大神解答有没有一个好的方法来解决一下?

解决方案 »

  1.   

    为什么要for循环发,图片很大吗?还是要边发服务器边显示?
      

  2.   

    #pragma  - scoket delegate
    - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port{
        NSLog(@"didConnectToHost");
        [_AFSocket readDataWithTimeout:timeOut tag:0];
    }- (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err{
        NSLog(@"willDisconnectWithError==%@",err);
    }- (void)onSocketDidDisconnect:(AsyncSocket *)sock
    {
        NSLog(@"onSocketDidDisconnect");
    }
    - (void)onSocketDidSecure:(AsyncSocket *)sock{
        NSLog(@"onSocketDidSecure");
    }- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
    [_AFSocket readDataWithTimeout:timeOut tag:0];//循环接受IP包 

      

  3.   

    不知道你的问题解决木有,这个问题我也遇见过,在- (void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag函数中写上 readDataWithTimeout:timeOut  递归循环接受,用一个NSMutableData 接受每次的数据,希望能帮到你
      

  4.   

    已经写上递归了,用for循环丢包严重的原因是socket上个包没有发送完,就直接发下个包了。胆识我在onSocket:(AsyncSocket *)sock didWriteData的回调中发送下个包,服务器那边还是收到部分包,还是丢包。最后还是用服务器收到包后给个应答在继续发的。用这个方法后,又出现了粘包现象,晕死了。TCP协议,每次发送包的内容为1060字节,服务器的接受缓存为2K,粘包现在现在还没有很好的解决。
      

  5.   

    兄弟,加油!服务器端知道的不太多,我现在的主要是ios开发,服务器端都是公司写好的。
      

  6.   

    http://www.vckbase.com/index.php/wv/10
      

  7.   


    关于 asyncSocket 发送图片,求asunchaofan指导啊(QQ1101367326),我的问题是上传文件,然后服务器会回传进度跟图片的地址,但是我可以接受到进度,接受不到图片地址!!
    感谢啊感谢啊
      

  8.   

    服务器端用0xffff,甚至更大的缓冲接收啊,每次只能收一个包的缓冲,肯定会丢包的。