手机
当前位置:查字典教程网 >编程开发 >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 URL乱码的解决办法

java信号量控制线程打印顺序的示例分享

Java在Linux下 不能处理图形的解决办法 分享

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

java中String的常见用法总结

java定时任务的实现方法

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

Java通过接口实现匿名类的实例代码

Java 使用poi把数据库中数据导入Excel的解决方法

精品推荐
分类导航