关于 SocketChannel.write(ByteBuffer src) 的奇怪的疑难问题 欲聚大众之力解决

为以下问题我快到达疯到的边缘,希望大家帮帮我救救我,不知道我会不会因为这问题而死掉。

我写了个聊天程序,服务器端给用户发送数据如下(已简化)

try
{
System.out.println("sendDate:-1-");
//socketChannel是对象SocketChannel
socketChannel.write(byteBuffer);
System.out.println("sendDate:-2-");
}
catch(Exception e)
{
System.out.println("sendDate:-3-");
}

以上代码正常情况下运行无错,可是偶然会发生奇怪的现象,当运行到socketChannel.write(byteBuffer);时就停住了,再也不向下运行了,在输出文件里只看到“sendDate:-1-”,没有“sendDate:-2-”和“sendDate:-3-”,这证明运行到socketChannel.write(byteBuffer)时就停住了。

我想不通的是,当运行到socketChannel.write(byteBuffer)时,如果:
1、尚未连接此通道,抛出NotYetConnectedException
2、此通道已关闭,抛出ClosedChannelException
3、正在进行写入操作时另一个线程关闭了此通道,抛出AsynchronousCloseException
4、正在进行写入操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程的状态设置为中断,抛出ClosedByInterruptException
5、发生其他 I/O 错误,抛出IOException

至少有个异常抛出啊,可是它就是不返回和抛出异常,整个系统就因为其中一个socketChannel.write(byteBuffer)停住而崩溃了。

不知道大家有没有碰到这类问题,请帮帮小弟,救我救我哭~~

NIO的使用不能按照普通socket那样使用,一定采取Doug Lee的ReAction模式,见本站。可以绝对说,只有这样才能正常使用socketchannel。

除此以外,可以说出现各种问题,概不负责,所以,必须找到驾驭之道,才不至于抓狂。