首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

java.nio.channels.IllegalBlockingModeException

2011-11-13 
非阻塞通信(ServerSocketChannels,SocketChannels)中无法用ObjectInputStream,ObjectOutputStream》》》小弟

非阻塞通信(ServerSocketChannels,SocketChannels)中无法用ObjectInputStream,ObjectOutputStream


》》》小弟我想写一个投票系统《《《
在server与client两端用非阻塞方式进行通信,服务器把投票任务的“对象”下发到 client端,client端把投票结果“对象”再回传给server端,但是出了问题,在client端与Server建立连接后,client端的语句:
 ObjectOutputStream oos = new ObjectOutputStream(socketChannel.socket().getOutputStream());
报错:
java.nio.channels.IllegalBlockingModeException
at java.nio.channels.Channels.write(Unknown Source)
at java.nio.channels.Channels.access$000(Unknown Source)
at java.nio.channels.Channels$1.write(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.drain(Unknown Source)
at java.io.ObjectOutputStream$BlockDataOutputStream.setBlockDataMode(Unknown Source)
at java.io.ObjectOutputStream.<init>(Unknown Source)
at cn.com.yd.vote.navigator.EchoClient3.talk(EchoClient3.java:50)
at cn.com.yd.vote.navigator.NavigatorView$Mythread.run(NavigatorView.java:61)
at java.lang.Thread.run(Unknown Source)
我在网上也查了一下原因,说是因为ObjectOutputStream是阻塞模式,而ServerSocketChannels,SocketChannels是非阻塞模式,但并没有说如何解决。
因为我想直接将对象序列化/反序列化,我想这样在数据传递读写过程中会很方便,但又不知道这样行不行的通,所以请各位高手给小弟指点一下

[解决办法]
你既然用Channels,那当然要用Channels的读写方法了

Java code
ByteBuffer buf = ByteBuffer.wrap(message.getBytes());        int nbytes = channel.write(buf);//... 

热点排行