服务端代码
private void listen() throws IOException {
SocketChannel client;
while (selector.select() > 0) {
System.out.println("select");
Set<SelectionKey> selectionKeys = selector.selectedKeys();
Iterator<SelectionKey> keyIterator = selectionKeys.iterator();
while (keyIterator.hasNext()) {
SelectionKey key = keyIterator.next();
//置空迭代器
keyIterator.remove();
try {
if (key.isAcceptable()) {
server = (ServerSocketChannel) key.channel();
client = server.accept();
client.configureBlocking(false);
client.register(selector,SelectionKey.OP_READ);
}else if (key.isReadable()) {
System.out.println("read");
ByteBuffer readBuffer = ByteBuffer.allocate(1024);
SocketChannel readChannel = (SocketChannel) key.channel();
readChannel.read(readBuffer);
readBuffer.flip();
int i = readBuffer.getInt();
System.out.println("输出 " +i);
}
if (key.isWritable()) {
}
}catch (IOException e) {
key.channel().close();
key.cancel();
}
}
}
}
客户端代码
ByteBuffer writeBuffer = ByteBuffer.allocate(1024);
writeBuffer.putInt(111);
try {
client.write(writeBuffer);
} catch (IOException e) {
e.printStackTrace();
}
服务端输出3次select 其中一次是连接accept 一次是接收消息 还有一次呢?
另外 在另一个程序中 服务端不断地对同一个消息处理 大概6次直到报错(这个程序是持续连接 另起线程)
求助