Я пишу программу сервера/клиента, которую клиенты отправляют текстовое сообщение на сервер. Я использовал неблокирующий ввод-вывод (NIO API), но сообщения на сервере не показывать correctly.this мой код на сервере:Отправка сообщения с использованием неблокирующего ввода-вывода в Java (NIO API)
private JTextArea displayArea;
private int numBytes;
private ByteBuffer buffer;
/*...
some code is here
...*/
displayArea = new JTextArea();
add(new JScrollPane(displayArea), BorderLayout.CENTER);
setSize(400, 500);
setVisible(true);
/*...
some code is here
...*/
buffer = ByteBuffer.allocate(20);
buffer.clear();
displayArea.append("reading data...");
do{
numBytes = socketChannel.read(buffer);
}while(numBytes == -1);
displayArea.append("\nData read.");
buffer.flip();
int usedBytes = buffer.position();
byte[] bufferArray = buffer.array();
String message = new String(bufferArray, 0, usedBytes);
displayArea.append("\n"+message);
И это часть кода клиента:
byte[] byteData = message.getBytes();
buffer.put(byteData);
socketChannel.write(buffer);
buffer.clear();
в период выполнения, когда клиент посылает сообщение на сервер, пространство символы или фрагмент сообщения.
Вы действительно не должны использовать NIO напрямую, это очень низкоуровневый API. Вместо этого попробуйте Netty. –
Что такое Netty? И где я могу найти описание об этом? – Youtaab
В Google Поиске, конечно. Это основанная на NIO библиотека, которая дает вам гораздо более чистый API для кодирования. –