Здесь Один сервер и один клиент. И связь поддерживалась по выбору канала.
лайк--
Сервер ---
SelectionKey selectKey = channel.register(this.selector,
SelectionKey.OP_ACCEPT);
while (selectKey.selector().select() > 0) {
Set<SelectionKey> selectedKeys = this.selector.selectedKeys();
Iterator<SelectionKey> iterator = selectedKeys.iterator();
while (iterator.hasNext()) {
SelectionKey key = iterator.next();
iterator.remove();
if (key.isAcceptable()) {
ServerSocketChannel nextChannel = (ServerSocketChannel) key
.channel();
SocketChannel newChannel = nextChannel.accept();
newChannel.configureBlocking(false);
if (!newChannel.isRegistered()) {
SelectionKey selectionKey = newChannel.register(
this.selector, SelectionKey.OP_READ
| SelectionKey.OP_WRITE);
selectionKey.attach(newChannel);
}
} else if (key.isWritable()) {
SocketChannel attachment1 = (SocketChannel)key.attachment();
ByteBuffer writeBuffer = ByteBuffer.wrap("Hello".getBytes());
attachment1.write(writeBuffer);
System.out.print("Written");
}
}
}
Клиент:
InetSocketAddress isa = new InetSocketAddress(InetAddress
.getLocalHost(), 4444);
SocketChannel sc = null;
try {
while (true) {
Thread.sleep(10000);
sc = SocketChannel.open();
sc.connect(isa);
ByteBuffer byteBuffer = ByteBuffer.allocate(BUFSIZE);
int nbytes = sc.read(byteBuffer);
byteBuffer.flip();
dbuf.flip();
CharBuffer cb = decoder.decode(byteBuffer);
System.out.println(isa + " : " + cb);
}
Проблема заключается в том, что каждый раз, когда клиент считывает данные до полного размера ограничения буфера клиента вместо предела отправляемых данных.