使用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

回到顶部