从Socket上读取对端发过来的数据一般有两种方法:1)按照字节流读取[java] view plain copyBufferedInputStream in = new BufferedInputStream(socket.getInputStream()); int r = -1; List l = new LinkedList(); while ((r = in.read()) != -1) { l.add(Byte.valueOf((byte) r)); } 2)按照字符流读取[java] view plain copyBufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String s; while ((s = in.readLine()) != null) { System.out.println("Reveived: " + s); } 这两个方法read()和readLine()都会读取对端发送过来的数据,如果无数据可读,就会阻塞直到有数据可读。或者到达流的末尾,这个时候分别返回-1和null。这个特性使得编程非常方便也很高效。但是这样也有一个问题,就是如何让程序从这两个方法的阻塞调用中返回。总结一下,有这么几个方法:1)发送完后调用Socket的shutdownOutput()方法关闭输出流,这样对端的输入流上的read操作就会返回-1。注意不能调用socket.getInputStream().close()。这样会导致socket被关闭。当然如果不需要继续在socket上进行读操作,也可以直接关闭socket。但是这个方法不能用于通信双方需要多次交互的情况。2)发送数据时,约定数据的首部固定字节数为数据长度。这样读取到这个长度的数据后,就不继续调用read方法。3)为了防止read操作造成程序永久挂起,还可以给socket设置超时。如果read()方法在设置时间内没有读取到数据,就会抛出一个java.net.SocketTimeoutException异常。例如下面的方法设定超时3秒。socket.setSoTimeout(3000);

Socket read阻塞 处理方法相关推荐

  1. Socket 通信中read方法阻塞接收的问题

    客户端: public class Client {public static void main(String[] args) throws IOException {// 与服务器建立连接Sock ...

  2. socket read阻塞_go tcp中的ioutil.ReadAll阻塞的问题

    最近有写socket相关的东西,刚好有人问我这个问题,我就记录一下,发现这个问题还是有很多人不了解的. 在socket-tcp的代码中大致这两种接受数据的方法,con.Read以及ioutil.Rea ...

  3. boost库之socket 非阻塞/缓冲区大小等属性设置

    boost库之socket 非阻塞/缓冲区大小等属性设置 原文:http://blog.csdn.net/byxdaz/article/details/77318219 asio socket 非阻塞 ...

  4. java socket 阻塞模式_Java中Socket Read阻塞问题

    本人来说并不熟悉JAVA语言,只是近期在分析某个简单的java agent程序时,根据对应的代码写了一个对接的程序,两者之间是典型的C/S socket编程.客户端在向服务端发送相应的指令后,服务端( ...

  5. linux命令 recv阻塞时间,linux下close 掉socket 之后 阻塞的recv 不会立即返回

    在开发的一个基于rtmp聊天的程序时发现了一个很奇怪的现象. 在windows下当我们执行 closesocket的操作之后,阻塞的 recv会立即返回 -1 . 而在linux下当我们执行close ...

  6. Go 永久阻塞的方法

    简介 我们经常需要让主 goroutine 处于永久阻塞状态,这样其他的 gorotine 就可以一直运行处理信息.下面我总结了几种可以实现永久阻塞的方法,其中大部分实例代码无法直接运行,因为 Go ...

  7. android studio socket 失败,Android应用开发Android Studio建立Socket连接失败解决方法

    本文将带你了解Android应用开发Android Studio建立Socket连接失败解决方法,希望本文对大家学Android有所帮助. < Android Studio建立Socket连接失 ...

  8. php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...

    stream_set_blocking函数可以将资源流设置为阻塞模式或者非阻塞模式,主要影响的函数分别是fgets,fread,其他的手册没有说. 在socket编程中,如果一个socket连接上了, ...

  9. 从 Linux 源码看 Socket 的阻塞和非阻塞

    转载自 从 Linux 源码看 Socket 的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 大部分高性能网络框架采用的是非阻塞模式.笔者这 ...

最新文章

  1. 图形文件元数据管理工具exiv2
  2. 0元力压0.1元,中国电信中标连云港政务云项目
  3. php导出excel2007实例,PHPExcel精简版与导入导出案例
  4. ONE- Open Navigator Engine 开放式浏览器引擎
  5. java死锁以及解决方案
  6. 行业职业病+生活安全事项
  7. 并行程序设计(MPICH环境配置)win10
  8. 关于onload的事件权柄以及踩过的坑
  9. Android颜色选择器库
  10. Python数据分析之理论知识
  11. 数据分析学习总结笔记04:异常值处理
  12. php pos系统,Linux下的十大开源POS系统软件
  13. ThinkPHP内核全行业小程序运营管理系统源码 自由DIY布局 一键生成小程序
  14. 快速查找某个范围内的所有素数
  15. WPS格式转换成Word的方法
  16. 电子元器件的基本介绍
  17. 构建CA证书详解过程步骤
  18. 北京老家具修复服务器,涨知识:图解古旧家具修复的六个步骤
  19. 小程序中实现待办功能
  20. 简述BeanUtils中copyProperties

热门文章

  1. 打怪升级之小白的大数据之旅(六十一)<Hive旅程第二站:Hive安装>
  2. 12.3明德杨UART_TX调试经验
  3. python怎么在图片上写字_python如何实现内容写在图片上
  4. php用户名不能以数字开头,不能以数字开头命名CSS类
  5. flowable中BPM实现核心对象
  6. python的CANOpen
  7. PHPBB3的用户密码
  8. Spark RDD算子(八)mapPartitions, mapPartitionsWithIndex
  9. feign.codec.DecodeException 异常原因
  10. 每日一记 - 3.7