当前位置:编程学习 > JAVA >>

NIO的write写不出去

先贴上代码片段

						key = (SelectionKey) itr.next();//获取事件参数
if (key.isAcceptable())
{
itr.remove(); //移除当前事件
ServerSocketChannel sc_t = (ServerSocketChannel) key.channel();//获取产生事件的Socket通道
SocketChannel chn = sc_t.accept(); //响应该SocketChannel上的连接

System.out.println("Accept a connect.Client IP:" + 
chn.socket().getInetAddress().toString()
);

  System.out.println("WriteOut:" + 
  chn.write(ByteBuffer.wrap(welcomeInfo.getBytes())));//Socket只支持bin流


如片段最后一行,调用write发送一个String串 welcomeInfo给客户端,但客户端一直无法收到该字串(客户端已连接成功),而再加上一句
chn.close();

则客户端可以收到发送的字符串。
现在我有些不明白的是,
SocketChannel一定要close了才能把数据发送出去么?感觉这样处理有些不对劲。
另外说一句,从打印信息看,write返回26(welcomeInfo的长度),应该说明它把信息发出去了。。。。
最后补充一下,这个程序的测试是在本机上建立客户端线程,两边通过localhos进行连接的。 nio java socket --------------------编程问答-------------------- 没看过NIO源码,不过chn.write(ByteBuffer.wrap(welcomeInfo.getBytes())))  是将缓冲区的数据写入甬道。我认为调用close()才把甬道的数据写出来吧,就像输出流的flush()方法 --------------------编程问答--------------------
引用 1 楼 wq568907978 的回复:
没看过NIO源码,不过chn.write(ByteBuffer.wrap(welcomeInfo.getBytes())))  是将缓冲区的数据写入甬道。我认为调用close()才把甬道的数据写出来吧,就像输出流的flush()方法

可是我的chn是响应了传入的连接啊,如果说写一次就把连接关掉,总觉得怪怪的。
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,