java 非阻塞i o,使用Java(NIO API)中的非阻塞I / O发送消息

I'm writing a server/client program that clients send text message to server.I have used non-blocking I/O (NIO API) but messages on the server do not display correctly.this is my code on server:

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);

And this is a piece of client code:

byte[] byteData = message.getBytes();

buffer.put(byteData);

socketChannel.write(buffer);

buffer.clear();

In run time when a client send message to server , space characters or a piece of message is shown.

解决方案

You need to flip() before write(), and compact() afterwards.

NB Looping while read() returns -1 doesn't begin to make sense. It means the peer disconnected, for heaven's sake.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值