在java(NIO API)中使用非阻塞IO发送消息。

问题描述 投票:0回答:1

我正在写一个客户端发送短信到服务器的serverclient程序.我已经使用了非阻塞IO(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();

在运行时,当客户端向服务器发送消息时,会显示出空格字符或一段消息。

java network-programming nio bytebuffer
1个回答
0
投票

你需要 flip() 之前 write()compact() 之后。

NB 循环的同时 read() 返回-1,这就说不通了。这意味着对等体断开了,看在上帝的份上。

© www.soinside.com 2019 - 2024. All rights reserved.