下面的代码是一个实例化SocketChannel的过程:
SocketChannel channel = SocketChannel.open();
//要设置连接超时
channel.socket().connect(addr,connectionTimeOut_ms);
//设置读超时
channel.socket().setSoTimeout(timeout_ms);
然后基于NIO的一贯性崇拜,会出现channel.read()读取数据
int java.nio.channels.ReadableByteChannel.read(ByteBuffer dst) throws IOException
Reads a sequence of bytes from this channel into the given buffer.
唯一不幸的是,这个SocketChannel的read()方法与Socket不同,是没有超时设置的!
所以上面做了一堆socket的超时设置,在Channel read毫无作用。具体可以查看http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4614802
。
就解决这个问题上来说,还是建议用回传统的Socket阻塞试读取整个流。或者使用ReadableByteChannel这个类(不能解决读写双向的Channel阻塞问题),封装Socket流,多绕了一圈而已。
//i.读取buffer的chanel
InputStream is = sock.socket().getInputStream();
ReadableByteChannel readCh = Channels.newChannel(is);
分享到:
相关推荐
java的ServerSocketChannel与SocketChannel的使用
SocketChannel非阻塞网络编程
一个关于SocketChannel、ServerSocketChannel、Selector的综合案例
这是一个非阻塞通信学习的基础模板,让你轻松掌握非阻塞通信。里面还包含了可运行的jar包,可以抢先体验效果哦~_~
NIO SSL 与阻塞IO不同,JVM不提供扩展基本套接字通道类的标准SSLSocketChannel和SSLServerSocketChannel类。 相反,必须使用手动编排SSL交换。...使用SSLSocketChannel 由普通的SocketChannel和必要的SSL相关信息
一个 Java SocketChannel 实现,它使用提供的 Proxy 实例通过提供的代理建立网络连接。 SocketChannel 是通过表面下的 Socket 实例实现的。 限制 此实现目前仅支持阻塞模式。 请注意,这是 SocketChannel 实例的默认...
NIO(服务端和客户端代码) 博文链接:https://songjianyong.iteye.com/blog/1757406
使用socket channel 连接服务器,断线重连,发送保活等的封装类。 Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道。可以通过以下2种方式创建SocketChannel: 打开一个SocketChannel并连接到互联网上的...
没有使用其他jar包 主要功能: 1、广场群聊,即发送的消息所有在线的人都能看到 2、聊天室群聊,可以创建聊天室,进入聊天室的人可以在里面聊天,创建的人或者是第一个人为管理员,拥有踢人的权限;广场上有一个...
【IT十八掌徐培成】Java基础第27天-02.NIO-ServerSocketChannel-SocketChannel.zip
SocketChannel被Selector检查,检查其声称可以接受的状态是否已经产生,如当SocketChannel在向Selector注册是设置了可接受状态为Read,此时当SocketChannel接收到数据后将进入可读状态。 如果需要实现一个线程或...
本文实例讲述了Android在JNI中使用ByteBuffer的方法。分享给大家供大家参考。具体如下: 一、ByteBuffer 定义 在NIO中,数据的读写操作始终是与缓冲区相关联的(读取时信道(SocketChannel)将数据读入缓冲区,写入时...
Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能...通过仔细阅读这个例程,相信你已经大致了解NIO的原理和使用方法,下一篇,我们将使用多线程来处理这些数据,再搭建一个自己的Reactor模式。
利用Socket实现聊天室实时聊天功能,包含服务器端以及客户端,输入指定IP和端口号进行监控
用JAVA写的一个FPT小程序,可实现简单的Ftp功能,Server端有Ui界面。
● SocketChannel:Socket的替代类,支持阻塞通信与非阻塞通信。 ● Selector:为ServerSocketChannel监控接收连接就绪事件,为SocketChannel监控连接就绪、读就绪和写就绪事件。 ● SelectionKey:代表...
1.ServerSocketChannel与SocketChannel通讯 2.java Fork/Join 与ThreadPool使用
LikeShareServer 使用socketchannel技术开发server端提供LikeShare及PCLikeShare供通管道
客户端使用 AsynchronousSocketChannel 和 CompletableFuture 的简单 TCP 客户端
java socket 大文件传输,快速传输, 数据包的分片,组装,涉及UDP,TCP传输技术,NIO非阻塞等等,适合对socket编程进一步学习的同学