socket通讯,已读到流末尾了,为什么没返回-1,一直阻塞 byte[] buff=new byte[1024];
int len=-1;
byte b;
while( (b = dis.readByte()) != -1){
System.out.println("b = " + b);
}
int len=-1;
byte b;
while( (b = dis.readByte()) != -1){
System.out.println("b = " + b);
}
解决方案 »
- java if 语句问题 菜鸟提问
- 随机生成不同的MAC
- eclipse出现BUG,建项目时给我建了个无限嵌套文件夹
- java中如何使用控件数组?
- 高手麻烦帮忙解释下,为什么这样!!!
- applet/J2SE 如何通过byte[]装载本地图片
- c/s模式下的Jbuilder中做的java程序如何的换肤?急急!!!!
- 请哪位大侠赐教一下,这个{是不需要的,为什么编译时还出现这样的错误
- 能编译过却不能执行的class文件,高手请进。给出源文件
- 我有ms sql server的驱动工具,但不知道怎么用,这样就不用jdbc-odbc桥了吗?
- GUI 设计难题,如何将进度条上覆盖图片
- jfreechart 显示文字?~ 急~
setSoTimeOut()可以设置超过一定时间没有数据,则认为数据已经发送完毕。 你去参考看看吧!
readByte是返回EOFException 再看看javadoc吧
---------------------------------------------------------------------------------------public final byte readByte() throws IOException
返回:
此输入流的下一个字节,以有符号 8 位 byte 的形式表示。
抛出:
EOFException - 如果此输入流已经到达末尾。
IOException - 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
---------------------------------------------------------------------------------------注意:读到流结尾会抛 EOFException 异常。另外如 老紫竹 所说,对方发完数据后应该关闭输出流(Socket.shutdownOutput()),为防止线程一直被阻塞,可以设置 Socket 的超时时间(Socket.setSoTimeout(毫秒)),然后在读取数据时捕获 SocketTimeoutException 异常。