socket通讯,已读到流末尾了,为什么没返回-1,一直阻塞    byte[] buff=new byte[1024];
    int len=-1;
    byte b;
    while( (b = dis.readByte()) != -1){
        System.out.println("b = " + b);
    }

解决方案 »

  1.   

    给你个建议。socket有一个参数
    setSoTimeOut()可以设置超过一定时间没有数据,则认为数据已经发送完毕。 你去参考看看吧!
      

  2.   

    一般对于InputStream而言 只有read方法才返回-1
    readByte是返回EOFException 再看看javadoc吧
      

  3.   

    以下摘自 JDK API 文档:
    ---------------------------------------------------------------------------------------
    public final byte readByte() throws IOException
    返回:
    此输入流的下一个字节,以有符号 8 位 byte 的形式表示。 
    抛出: 
    EOFException - 如果此输入流已经到达末尾。 
    IOException - 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
    ---------------------------------------------------------------------------------------
    注意:读到流结尾会抛 EOFException 异常。另外如 老紫竹 所说,对方发完数据后应该关闭输出流(Socket.shutdownOutput()),为防止线程一直被阻塞,可以设置 Socket 的超时时间(Socket.setSoTimeout(毫秒)),然后在读取数据时捕获 SocketTimeoutException 异常。