Я использую неблокирующий serversocket. Я выделил размер ByteArray как 100. Затем клиент отправляет данные размером 200 байт на сервер, сервер получает 200-байтовое сообщение как данные 100 байт + 100 байт. Мой вопрос: после чтения 100 байт из канала, где оставшиеся 100 байт данных хранятся до повторного вызова read(). Спасибо (извините, если какая-то ошибка грамматика)
серверная программа:
public class SelectorExample {
public static void main (String [] args)
throws IOException {
// Get selector
Selector selector = Selector.open();
System.out.println("Selector open: " + selector.isOpen());
// Get server socket channel and register with selector
ServerSocketChannel serverSocket = ServerSocketChannel.open();
InetSocketAddress hostAddress = new
InetSocketAddress("131.10.20.16", 5454);
serverSocket.socket().bind(hostAddress,0);
serverSocket.configureBlocking(false);
int ops = serverSocket.validOps();
SelectionKey selectKy = serverSocket.register(selector, ops, null);
for (;;) {
System.out.println("Waiting for select...");
int noOfKeys = selector.select();
System.out.println("Number of selected keys: " + noOfKeys);
Set selectedKeys = selector.selectedKeys();
Iterator iter = selectedKeys.iterator();
while (iter.hasNext()) {
SelectionKey ky = (SelectionKey)iter.next();
if (ky.isAcceptable()) {
// Accept the new client connection
SocketChannel client = serverSocket.accept();
client.configureBlocking(false);
// Add the new connection to the selector
client.register(selector, SelectionKey.OP_READ);
System.out.println("Accepted new connection from client: " + client);
}
else if (ky.isReadable()) {
// Read the data from client
SocketChannel client = (SocketChannel) ky.channel();
ByteBuffer buffer = ByteBuffer.allocate(100);
int i =client.read(buffer);
String output = new String(buffer.array());
System.out.println("Message read from client: " + output);
if (i == -1) {
client.close();
System.out.println("Client messages are complete; close.");
}
} // end if (ky...)
iter.remove();
} // end while loop
} // end for loop
}
new String(buffer.array(), 0, buffer.position());
- person user207421   schedule 02.05.2017