TCP的三次握手与NIO的实现方式
来源:10-7 Java的IO机制
YXF_LYY
2021-06-16
ServerSocketChannel的作用为监听是否连接,当它注册到Selector里时关注点也是是否连接的,此时这个语句selector.select();就是等待三次握手的过程。SocketChannel client = server.accept();这个是当连接已经建,获得连接请求后才会创建一个SocketChannel实现真正的数据通讯?
1.监听是否有连接:
ServerSocketChannel serverChannel=ServerSocketChannel.open();
ServerSocket ss = serverChannel.socket();
InetSocketAddress address = new InetSocketAddress(5555);
ss.bind(address);
2.建立连接:
selector.select();TCP三次握手机制
3.接收请求:
SocketChannel client = server.accept();
4.根据SocketChannel 的读写关注点进行数据通讯
5.关闭
老师请问以上的理解是否正确?
再就是selector.select();此处阻塞的作用是什么,是不是等待连接成功后将ServerSocketChannel的状态改为就绪状态,然后进入while (iterator.hasNext()) {}里面才能进行正常通讯?
1回答
-
同学好, server.accept()主要是封装了三次握手的实现,第三次握手后,会把连接从半ready的队列放到完全ready的队列里。而select()就和三次握手没有太多关系了,这里相当于是一种监听,消费感兴趣的事件,如果没有监听到对应的事件就一直会阻塞去监听,比如客户端发送的数据还没过来的时候,就阻塞,一旦有一个客户端发消息过来了,就可以去通知线程去消费了
012021-06-18
相似问题
回答 2
回答 1