62,569
社区成员




} else if (key.isReadable()) {
SocketChannel socketChannel = (SocketChannel) key.channel();
while (true) {
readBuffer.clear();
int r = socketChannel.read(readBuffer);
System.out.println(r);
if (r <= 0) {
key.cancel();
socketChannel.close();
break;
}
System.out.println(new String(readBuffer.array()).trim());
// writeBuffer.flip();
// socketChannel.write(writeBuffer);
}
}
package com.soli.nio;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
public class ServerNIO {
public static void main(String[] args) throws Exception {
ByteBuffer readBuffer = ByteBuffer.allocate(1024);
// ByteBuffer writeBuffer = ByteBuffer.wrap("服务器".getBytes());
ByteBuffer writeBuffer = ByteBuffer.allocate(1024);
writeBuffer.put("服务器".getBytes());
Selector selector = Selector.open();
InetSocketAddress address = new InetSocketAddress(9876);
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
serverSocketChannel.socket().bind(address);
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
System.out.println("start");
while (true) {
int temp = selector.select();
Set<SelectionKey> keys = selector.selectedKeys();
System.out.println("keys.size()=" + temp);
if (temp > 0) {
for (Iterator<SelectionKey> it = keys.iterator(); it.hasNext();) {
SelectionKey key = it.next();
System.out.println(key);
if (key.isAcceptable()) {
ServerSocketChannel ssc = (ServerSocketChannel) key.channel();
SocketChannel socketChannel = ssc.accept();
socketChannel.configureBlocking(false);
socketChannel.register(selector, SelectionKey.OP_READ);
} else if (key.isReadable()) {
SocketChannel socketChannel = (SocketChannel) key.channel();
while (true) {
readBuffer.clear();
int r = socketChannel.read(readBuffer);
System.out.println(r);
if (r <= 0) {
key.cancel();
socketChannel.close();
break;
}
System.out.println(new String(readBuffer.array()).trim());
// writeBuffer.flip();
// socketChannel.write(writeBuffer);
}
}
it.remove();
}
}
System.out.println("keys.size()=" + keys.size());
}
}
}
package com.soli.nio;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;
public class ClientNIO {
public static void main(String[] args) throws Exception {
ByteBuffer writeBuffer = ByteBuffer.allocate(1024);
writeBuffer.put("客户端".getBytes());
// ByteBuffer writeBuffer = ByteBuffer.wrap("客户端".getBytes());
ByteBuffer readBuffer = ByteBuffer.allocate(1024);
Selector selector = Selector.open();
SocketChannel socketChannel = SocketChannel.open();
socketChannel.configureBlocking(false);
InetSocketAddress address = new InetSocketAddress(InetAddress.getLocalHost(), 9876);
System.out.println(socketChannel.connect(address));
while (!socketChannel.finishConnect())
;
// socketChannel.register(selector, SelectionKey.OP_READ);
writeBuffer.flip();
socketChannel.write(writeBuffer);
// while (true) {
// int temp = selector.select();
// System.out.println(temp);
// if (temp > 0) {
// Set<SelectionKey> keys = selector.selectedKeys();
// for (Iterator<SelectionKey> it = keys.iterator(); it.hasNext();) {
// SelectionKey key = it.next();
// if (key.isReadable()) {
// System.out.println("ok");
// SocketChannel sc = (SocketChannel) key.channel();
// int r = sc.read(readBuffer);
// if (r <= 0) {
// break;
// }
// System.out.println(new String(readBuffer.array()).trim());
// }
// it.remove();
// }
// }
// }
}
}