Socket read阻塞 处理方法
从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阻塞 处理方法相关推荐
- Socket 通信中read方法阻塞接收的问题
客户端: public class Client {public static void main(String[] args) throws IOException {// 与服务器建立连接Sock ...
- socket read阻塞_go tcp中的ioutil.ReadAll阻塞的问题
最近有写socket相关的东西,刚好有人问我这个问题,我就记录一下,发现这个问题还是有很多人不了解的. 在socket-tcp的代码中大致这两种接受数据的方法,con.Read以及ioutil.Rea ...
- boost库之socket 非阻塞/缓冲区大小等属性设置
boost库之socket 非阻塞/缓冲区大小等属性设置 原文:http://blog.csdn.net/byxdaz/article/details/77318219 asio socket 非阻塞 ...
- java socket 阻塞模式_Java中Socket Read阻塞问题
本人来说并不熟悉JAVA语言,只是近期在分析某个简单的java agent程序时,根据对应的代码写了一个对接的程序,两者之间是典型的C/S socket编程.客户端在向服务端发送相应的指令后,服务端( ...
- linux命令 recv阻塞时间,linux下close 掉socket 之后 阻塞的recv 不会立即返回
在开发的一个基于rtmp聊天的程序时发现了一个很奇怪的现象. 在windows下当我们执行 closesocket的操作之后,阻塞的 recv会立即返回 -1 . 而在linux下当我们执行close ...
- Go 永久阻塞的方法
简介 我们经常需要让主 goroutine 处于永久阻塞状态,这样其他的 gorotine 就可以一直运行处理信息.下面我总结了几种可以实现永久阻塞的方法,其中大部分实例代码无法直接运行,因为 Go ...
- android studio socket 失败,Android应用开发Android Studio建立Socket连接失败解决方法
本文将带你了解Android应用开发Android Studio建立Socket连接失败解决方法,希望本文对大家学Android有所帮助. < Android Studio建立Socket连接失 ...
- php socket非阻塞,php stream_set_blocking设置非阻塞模式,php stream_set_blocking影响函数fgets()和fread()...
stream_set_blocking函数可以将资源流设置为阻塞模式或者非阻塞模式,主要影响的函数分别是fgets,fread,其他的手册没有说. 在socket编程中,如果一个socket连接上了, ...
- 从 Linux 源码看 Socket 的阻塞和非阻塞
转载自 从 Linux 源码看 Socket 的阻塞和非阻塞 笔者一直觉得如果能知道从应用到框架再到操作系统的每一处代码,是一件Exciting的事情. 大部分高性能网络框架采用的是非阻塞模式.笔者这 ...
最新文章
- 图形文件元数据管理工具exiv2
- 0元力压0.1元,中国电信中标连云港政务云项目
- php导出excel2007实例,PHPExcel精简版与导入导出案例
- ONE- Open Navigator Engine 开放式浏览器引擎
- java死锁以及解决方案
- 行业职业病+生活安全事项
- 并行程序设计(MPICH环境配置)win10
- 关于onload的事件权柄以及踩过的坑
- Android颜色选择器库
- Python数据分析之理论知识
- 数据分析学习总结笔记04:异常值处理
- php pos系统,Linux下的十大开源POS系统软件
- ThinkPHP内核全行业小程序运营管理系统源码 自由DIY布局 一键生成小程序
- 快速查找某个范围内的所有素数
- WPS格式转换成Word的方法
- 电子元器件的基本介绍
- 构建CA证书详解过程步骤
- 北京老家具修复服务器,涨知识:图解古旧家具修复的六个步骤
- 小程序中实现待办功能
- 简述BeanUtils中copyProperties
热门文章
- 打怪升级之小白的大数据之旅(六十一)<Hive旅程第二站:Hive安装>
- 12.3明德杨UART_TX调试经验
- python怎么在图片上写字_python如何实现内容写在图片上
- php用户名不能以数字开头,不能以数字开头命名CSS类
- flowable中BPM实现核心对象
- python的CANOpen
- PHPBB3的用户密码
- Spark RDD算子(八)mapPartitions, mapPartitionsWithIndex
- feign.codec.DecodeException 异常原因
- 每日一记 - 3.7