用NIO异步通信的时候,怎么知道是否异常?

HowUCan 2004-09-06 08:15:51
异步通信,比如用SocketChannel往外写的时候,是先写到socket的缓冲区,马上就返回了。如果socket在实际发送时出现异常,我怎么捕获呢?
难道在下次select时能知道?
...全文
125 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjsfr 2005-01-07
  • 打赏
  • 举报
回复
up!
HowUCan 2004-10-09
  • 打赏
  • 举报
回复
有人用过吗?
HowUCan 2004-09-15
  • 打赏
  • 举报
回复
我认为,在同步模式下,SocketChannel.write(ByteBuffer)会等对方正确接收到数据才返回,有异常会抛出。
而在异步模式下,SocketChannel.write(ByteBuffer)只是将数据放到Socket的缓冲区,然后马上就返回了,并不会等到数据全部发送到对方。如果write方法已经返回,而socket在发送的时候出错,我怎么知道它出错了?
zealVampire 2004-09-08
  • 打赏
  • 举报
回复
SocketChannel.write(ByteBuffer)就是直接发送消息的吧
在这里捕获就可以了的啊
selector.select();
是要SocketChannel注册了类似sc.register(selector,SelectionKey.OP_READ,request);这样读写或者接受的key的时候,才能进入selector
取消注册的时候SelectionKey key。cancel()
eddygtimegod 2004-09-08
  • 打赏
  • 举报
回复
我也懂得不多,不过,在发送的时候应该有段
while(true){
int n=selector.select();//获得IO准备就绪的数量
if(n==0)
{continue;}
后续处理codes
}
所以在这里应该catch IOException
而在Socket的建立的时候,捕获的是SocketException。网络编程我懂得也不多,看看后边的高手回答吧,这是我今天坐车时昏头昏脑看的。
mickeylm 2004-09-06
  • 打赏
  • 举报
回复
帮你顶

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧