代码没试,看起来是这个问题DataInputStream dis = new DataInputStream(socket.getInputStream());socket流应该是获取不到长度的,因为只有都读完了才会知道流长度嘛。
你打了断点之后可以获取,是因为执行到断点之后,有足够的时候把流里面的内容全读取完,就可以获取流长度了,此方法不可取

解决方案 »

  1.   

    dis要read了以后才有数据,还没read就调用len = dis.available();,所以len总是0.
                    dis = new DataInputStream(socket.getInputStream());
                    ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
                    byte[] inputByte = new byte[1024];
                    int length = 0;
                    while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {
                        bytestream.write(inputByte, 0, length);
                        Log.v(TAG, "received " + length + " bytes");
                    }
                    Log.v(TAG, "there is " + bytestream.size() + " bytes");
      

  2.   

    我不知道CSDN怎么继续追问的,所以就继续再你下面回复了哦、、、、我用了你上面给的代码之后,然后再调用int len = dis.available();  获取到的len还是0啊、、、
      

  3.   

    Log.v(TAG, "received " + length + " bytes");
    Log.v(TAG, "there is " + bytestream.size() + " bytes");
    这两条log打印的是什么?
      

  4.   

    干吗用原始的socket 这要自己构建协议,多扯淡,不如直接用http或者ftp
      

  5.   

    我要传的二进制的大小是7499,打印出的数据
    length:1024
    bytestream.size():7499然后我要把这个保存为图片:
    int len=dis.available();是这样做吗?
    新手就指教!!!
      

  6.   

    是这样。
    length是每次收取的数据,bytestream.size()是已收取的数据总长度。
      

  7.   

    我重新调试过后得到的还是0、、、、
    int len=dis.available();
    这是打出来的东西、、、
    length:1024
    length:1024
    length:848
    length:1024
    length:424
    length:1024
    length:424
    length:1024
    length:683
    bytestream.size():7499
    Server02 datalength = 0
    Server02 data length = 0
    Server02 succeed to receive picture!!
      

  8.   

    这个是我加入你代码的地方:
           DataInputStream dis = new DataInputStream(socket.getInputStream());
                
                ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
                 byte[] inputByte = new byte[1024];
                    int length = 0;
                    while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {
                        bytestream.write(inputByte, 0, length);  
                        System.out.println("length:"+length);
                    }
                    System.out.println("bytestream.size():"+bytestream.size());
                   
                int len=dis.available();   
    这样应该不会错的吧、、、但是加入之后打印出来的len还是0、、、、
      

  9.   

    不要int len = dis.available(); 跟 byte[] data = new byte[len];了。
    outStream.write(data);改成DataOutputStream dos = new DataOutputStream(outStream);
    dos.write(bytestream.toByteArray());
    dos.flush();
    dos.close();
      

  10.   

    楼主,这个程序成功了吗?如果成功了帮忙发我一份[email protected],我现在正好好研究如何用安卓socket来发图,谢谢了~
      

  11.   

    楼主,帮忙发我一份[email protected],我现在正好好研究如何用安卓socket来发图,谢谢了~,十分的需要》》》