Netty开篇——NIO章下(五)
发布时间:2024年01月16日
SelectionKey
- 表示 Selector 和网络通道的注册关系,共四种(全是常量):
- 相关方法:
public abstract Selector selector();//得到与之关联的Selector对象
public abstract SelectableChannel channel();//得到与之关联的通道
public final Object attachment();//得到与之关联的共享数据
public abstract SelectionKey interestOps(int ops);//设置或改变监听事件
public final boolean isAcceptable();//是否可以 accept
public final boolean isReadable();//是否可以读
public final boolean isWritable();//是否可以写
?
ServerSocketChannel
- ServerSocketChannel 在服务器端监听新的客户端 Socket 连接
- 相关方法:
- public static ServerSocketChannel open(),得到一个ServerSocketChannel通道
- publle final ServerSocketChannel bind(SocketAddress local),设置服务器端端口 号
- publle final SelectableChannel configureBlocking(boolean block), 设置阻塞或非 阻塞模式,取值false表示采用非阻塞模式
- publlc SocketChannel accept(),接受一个连接,返回代表这个连接的通道对象
- public final SelectionKey register(Selectorsel,int ops), 注册一个选择器并设置 监听事件
?
SocketChannel?
- SocketChannel,网络IO通道,具体负责进行读写操作。NIO 把缓冲区的数据写入通道,或者把通道里的数据读到缓冲区。
- 相关方法:
- public static SocketChannel open():/得到一个SocketChannel通道
- public final SelectableChannel configureBlocking(boolean block);//设置阻塞或非阻塞模式,取值false表示采用非阻塞模式
- public boolean connect(SocketAddress remote);//连接服务器
- public boolean finishConnect();//如果上面的方法连接失败,接下来就要通过该方法完成连接操作
- public int write(ByteBuffer src);//往通道里写数据
- public int read(ByteBuffer dst);//从通道里读数据
- public final SelectionKey register(Selectorsel,int ops,Object att);//注册一个选择器并设置监听事件,最后一个参数可以设置共享数据
- public final void close();//关闭通道

NIO实现聊天室功能(选修)
- 要求:
- 编写一个 NIO 群聊系统,实现服务器端和客户端之间的数据简单通讯(非阻塞)
- 实现多人群聊
- 服务器端:可以监测用户上线,离线,并实现消息转发功能
- 客户端:通过 channel 可以无阻塞发送消息给其它所有用户,同时可以接受其它用户发送的消息(有服务器转发得)
-
GroupChatServer



?
3. GroupChatClient?



文章来源:https://blog.csdn.net/weixin_39384775/article/details/135571807
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:chenni525@qq.com进行投诉反馈,一经查实,立即删除!