使用Java(NIO API)中的非阻塞I / O发送消息
我正在编写一个服务器/客户端程序,客户端将文本消息发送到服务器。我使用了非阻塞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();
在运行时,当客户端向服务器发送消息时,将显示空格字符或一条消息。
回答:
您需要在flip()
之前write()
和compact()
之后。
注意在read()
返回-1时循环并没有任何意义。为了天堂,这意味着同伴断开连接。
以上是 使用Java(NIO API)中的非阻塞I / O发送消息 的全部内容, 来源链接: utcz.com/qa/404416.html