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()方法 --------------------编程问答--------------------
可是我的chn是响应了传入的连接啊,如果说写一次就把连接关掉,总觉得怪怪的。
补充:Java , Java相关