我也懂得不多,不过,在发送的时候应该有段
while(true){
    int n=selector.select();//获得IO准备就绪的数量
    if(n==0)
        {continue;}
    后续处理codes
}
所以在这里应该catch IOException
而在Socket的建立的时候,捕获的是SocketException。网络编程我懂得也不多,看看后边的高手回答吧,这是我今天坐车时昏头昏脑看的。

解决方案 »

  1.   

    SocketChannel.write(ByteBuffer)就是直接发送消息的吧
    在这里捕获就可以了的啊
    selector.select();
    是要SocketChannel注册了类似sc.register(selector,SelectionKey.OP_READ,request);这样读写或者接受的key的时候,才能进入selector
    取消注册的时候SelectionKey key。cancel()
      

  2.   

    我认为,在同步模式下,SocketChannel.write(ByteBuffer)会等对方正确接收到数据才返回,有异常会抛出。
    而在异步模式下,SocketChannel.write(ByteBuffer)只是将数据放到Socket的缓冲区,然后马上就返回了,并不会等到数据全部发送到对方。如果write方法已经返回,而socket在发送的时候出错,我怎么知道它出错了?