我正在編寫客戶端向服務器發送文本消息的服務器/客戶端程序。我使用了非阻塞I/O(NIO API)服務器不顯示correctly.this上是我的代碼在服務器上:使用Java中的非阻塞I/O發送消息(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。 – 2014-09-27 08:48:27
Netty是什麼?在哪裏可以找到關於它的描述? – Youtaab 2014-09-27 09:08:50
當然,在Google搜索中。這是一個基於NIO的庫,它提供了一個更清晰的API來編碼。 – 2014-09-27 09:12:43