手机
当前位置:查字典教程网 >编程开发 >Java >java socket长连接中解决read阻塞的3个办法
java socket长连接中解决read阻塞的3个办法
摘要:解决的方法有3个:1约定发送的数据长度,比如http的keepAlive就是必须依赖这个的Content-Length2设置超时的时间,根据...

解决的方法有3个 :

1 约定发送的数据长度,比如 http的 keepAlive 就是必须依赖这个的 Content-Length

2 设置超时的时间,根据我的经验,只有在Socket级别设置才有效.

复制代码 代码如下:Socket socket = new Socket(host,port);

socket.setSoTimeout(100); // 如果超过100毫秒还没有数据,则抛出 SocketTimeoutException

3 让发送端发送完数据后,关闭连接。 这个在Http的操作时很常见。

(InputStream如何判断数据已经读取结束)

某些时候无法修改客户端的情况下情况一就只有pass掉了,情况二相对来说比较适合,当阻塞后直接抛出一个异常。情况三不适合长连接,因为整个通信过程中链路是不能中断的,也不能调shutdown结束。其实还有第四种方法:当读取到某些字符就不在往下读取了,比如读取到byebye就break。但是这也需要改客户端代码。选了一种折中的办法-设置超时:

StringBuilder sb = new StringBuilder(); try { client.setSoTimeout(500); while ((a = client.getInputStream().read(buf)) != -1) { sb.append(new String(buf, 0, a)); if (a != size) { break; } } } catch (Exception e) { } System.out.println(sb);

【java socket长连接中解决read阻塞的3个办法】相关文章:

java读取文件显示进度条的实现方法

java socket编程实例代码讲解

java 二维数组矩阵乘法的实现方法

java stringbuffer的用法示例

java 文件名截取方法

java 页面url传值中文乱码的解决方法

使用Java获取html中Select,radio多选的值方法

java中Scanner类的简单用法分享

java 取出文本文件中空行的实例代码

java中String的常见用法总结

精品推荐
分类导航