概述
SocketChannel用法
Java NIO中的SocketChannel是一个连接到TCP网络套接字的通道
SocketChannel支持设定参数
SO_SNDBUF 套接字发送缓冲区大小
SO_RCVBUF 套接字接收缓冲区大小
SO_KEEPALIVE 保护连接
O_REUSEADDR 复用地址
SO_LINGER 有数据传输时延缓关闭Channel(非阻塞模式下有用)
TCP_NODELAY 禁用Nagle算法
(1)创建SocketChannel
第一种方式:
SocketChannel socketChannel = SocketChannel.open(new
InetSocketAddress("www.baidu.com",80));
第一种方式:
SocketChannel socketChannel = SocketChannel.open;
socketChannel.connect(new InetSocketAddress("www.baidu.com",80));
直接使用有参open api或者使用无参open api,但是在无参open只是创建了一个SocketChannel对象,并没有进行实质的tcp连接
(2)连接校验
socketChannel.isOpen(); //测试SocketChannel是否为open状态
socketChannel.isConnected(); //测试SocketChannel是否被连接
socketChannel.isConnectionPending(); //测试SocketChannel是否正在连接
socketChannel.finishConnect(); //校验正在进行套接字连接额SocketChannel是否已经完成连接
(3)读写模式
SocketChannel支持阻塞和非阻塞模式:
socketChannel.configureBlocking(false);
false表示阻塞,true表示非阻塞
(4)读写
SocketChannel socketChannel = SocketChannel.open(new
InetSocketAddress("www.baidu.com",80));
ByteBuffer byteBuffer = ByteBuffer.allocate(16);
socketChannel.read(byteBuffer);
socketChannel.close();
System.out.println("over");
以上为阻塞式读,当执行到read出,线程将阻塞,控制台将无法打印over
SocketChannel socketChannel = SocketChannel.open(new
InetSocketAddress("www.baidu.com",80));
socketChannel.configureBlocking(false);
ByteBuffer byteBuffer = ByteBuffer.allocate(16);
socketChannel.read(byteBuffer);
socketChannel.close();
System.out.println("over");
以上为非阻塞式读,控制台将打印over
读写都是面向缓冲区,这个读写方式与前文中的FileChannel相同
(5)设置和读取参数
socketChannel.setOption(StandardSocketOptions.SO_KEEPALIVE,
Boolean.TRUE).setOption(StandardSocketOptions.TCP_NODELAY,Boolean.TRUE);
通过setOptions方法可以设置socket套接字的相关参数
socketChannel.getOption(StandardSocketOptions.SO_KEEPALIVE);
socketChannel.getOption(StandardSocketOptions.SO_RCVBUF);
可以通过getOption获取相关参数的值.如默认的接收缓冲区大小为8192byte.
SocketChannel还支持多路复用,但是多路复用在后续内容中会介绍到.
最后
以上就是舒心衬衫为你收集整理的SocketChannel用法SocketChannel用法的全部内容,希望文章能够帮你解决SocketChannel用法SocketChannel用法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复