SocketChannel 的信息发送和读取问题
代码如下。 问题是我给服务器端发送了内容,但是在服务器没有接受到内容,长度为-1,getInt获得的结果是0 ,求帮助
服务器的代码:
public void SocketChannelServer() throws Exception {
Selector seletor = Selector.open();
ServerSocketChannel serverchannel = ServerSocketChannel.open();
SocketChannel socketChannel = SocketChannel.open();
serverchannel.configureBlocking(false);
serverchannel.bind(new InetSocketAddress("127.0.0.1", 6000));
serverchannel.register(seletor, SelectionKey.OP_ACCEPT);
while (seletor.select() > 0) {// 启动服务,阻塞
Set<SelectionKey> keys = seletor.selectedKeys();
Iterator<SelectionKey> itera = keys.iterator();
while (itera.hasNext()) {
SelectionKey key = itera.next();
if (key.isAcceptable()) {
System.out.println("成功");
socketChannel = serverchannel.accept();
socketChannel.configureBlocking(false);
socketChannel.register(seletor, SelectionKey.OP_READ
| SelectionKey.OP_WRITE);
} else if (!key.isValid()) {
itera.remove();
continue;
} else if (key.isConnectable()) {
System.out.println("连接成功");
serverchannel.register(seletor, SelectionKey.OP_READ
| SelectionKey.OP_WRITE);
} else if (key.isReadable()) {
SocketChannel socketChannelNew = (SocketChannel)key.channel();
ByteBuffer bytebuffer = ByteBuffer.allocateDirect(100);
int j=socketChannelNew.read(bytebuffer);
System.out.println("长度" + j);
int y = bytebuffer.getInt();
System.out.println("读取" + y);
socketChannelNew.close();
}
else if (key.isWritable()) {
}
itera.remove();
}
}
客户端的代码:
int i=0;
SocketChannel channel=SocketChannel.open();
channel.configureBlocking(false);
InetSocketAddress remote=new InetSocketAddress("127.0.0.1",6000);
channel.connect(remote);
try {
while (!channel.finishConnect()) {
Thread.sleep(1000);
i++;
System.out.println("连接中。。。");
if (i > 5) {
break;
}
;
}
} catch (Exception e) {
System.out.println("连接失败");
return;
}
ByteBuffer bufferClient=ByteBuffer.allocateDirect(100);
bufferClient.putInt(0x12345678);
bufferClient.flip();
channel.write(bufferClient);
Thread.sleep(1000);
bufferClient.clear();
[最优解释]
我的结果是长度4, 读取值为0。
你调试一下吧
[其他解释]
怎么没人回复,求解答啊
[其他解释]
是同一段代码?
[其他解释]