java nio 的几个点

1、假如同步socketChannel.write(byte[])这个方法调用成功了,是表示对端一定能收到数据吗?还是说只是写到了本地的TCP 那个缓冲区里面?
2、还有一种是socketChannel是异步的情况下,如果我对端宕机了,我这端的select可以感知到read事件和write事件吗?如果能的话,是哪个事件呢?原理是什么呢?
这几个问题困扰我好久了,还望大牛给小弟指点迷津~~

阅读 2.3k
1 个回答
  1. 如果是阻塞式的,那只能代表数据已发出去,但不能保证对方已收到;如果是非阻塞式的,select到OP_WRITE就说明数据已发出去;无论哪种方式似乎都无法确保对方收到,除非对方用数据来应答;
  2. 对方宕机(或者拔网线),理论上我方是无法知道状态的,如果对方进程被kill掉,那么操作系统可能会给回一个FINRST,你应该会select到一个OP_READ,并在read时得到-1或异常。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题