Netty开篇——NIO章下(五)

SelectionKey

  1. 表示 Selector 和网络通道的注册关系,共四种(全是常量):
    • Int OP_ACCEPT:有新的网络连接可以接受,值为 16 (1 << 4)
    • Int OP_CONNECT: 代表连接已经建立,值为 8 (1 << 3)
    • Int OP_READ:代表读操作,值为 1 (1 << 0)
    • Int OP_WRITE: 代表写操作,值为 4  (1 << 2)

  2. 相关方法:
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

  1. ServerSocketChannel 在服务器端监听新的客户端 Socket 连接
  2. 相关方法:
  • 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 

  1. SocketChannel,网络IO通道,具体负责进行读写操作。NIO 把缓冲区的数据写入通道,或者把通道里的数据读到缓冲区。
  2. 相关方法:
  • 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实现聊天室功能(选修)

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

 

3. GroupChatClient 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值