客户端代码经常收不到服务器发来的消息,有的时候可以,有的时候不可以不知道什么原因,收不到的时候dedug到51行的时就自动退出了,看服务器日志已经发送了消息到客户端了,不知道什么原因

解决方案 »

  1.   

    java.net.Socket.getInputStream().read(byt[] buff);
    你使用1024字节的缓冲区,虽然你确定你不会收到超过1024字节的内容,但是这个方法并不是如你所期望地收取完所有数据才结束(如果是那样的话,那客户端只发了1023字节,你猴年马月才能收到第1024个字节?)
    因此,你只简单地调用一次这个方法,显然是错误的
    这个方法的返回值表示了此次调用返回的字节数,你应该提供一个有效的机制来明确自己需要收取多少数据,然后累加每次收到的字节计数,直到符合你的要求才进行进一步的处理!
    所以,至少应该是如下的过程(我随意从项目代码里截取的,看个意思就好):      int pos=0,ccnt=0,less=headLength;
          byte[] responseHead=new byte[headLength];
          while(less>0){
            ccnt=is.read(responseHead,pos,less);
            if(ccnt>0){
              pos+=ccnt;
              less-=ccnt;
            }else if(ccnt==-1) throw new SocketException();
          }
      

  2.   

    这样应该也可以吧:int i=0;
    while(i==0){
    i=socket.getInputStream().available();
    }
    byte[] b=new byte[i];