我決定用java nio製作我的UDPclient和UDPserver。 但我不明白幾件事情。 下面是代碼nio的一些麻煩
try {
DatagramChannel channel = DatagramChannel.open();
channel.configureBlocking(false);
channel.connect(remote);
//monitoring
Selector selector = Selector.open();
//read write keys
channel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
ByteBuffer buffer = ByteBuffer.allocate(1024*64);//number of bytes for channel
while (true) {
selector.select(60000);//number of channels I think
Set readyKeys = selector.selectedKeys();
if (readyKeys.isEmpty()) {
break;
}
else {
Iterator iterator = readyKeys.iterator();
while (iterator.hasNext()) {
SelectionKey key = (SelectionKey) iterator.next();
iterator.remove();
if (key.isReadable()) {
//read from buffer
channel.read(buffer);
}
if (key.isWritable()) {
//write to buffer
channel.write(buffer);
}
}
}
}
}
catch (IOException ex) {
System.err.println(ex);
}
如果我寫在控制檯東西key.isWritable
的事件發生?如果服務器發送事件isReadable將發生? 而我不明白如何處理我的事件,例如用戶編寫「GETL」或「REGR」(我自己的方法)。
但如果不僅從套接字讀取,而且從BufferedReader.readline讀取呢? – 2012-04-05 23:00:09
您未使用流媒體套接字。您正在使用數據報套接字。這意味着你的接收將是數據報包。 ReadLine對此沒有多大意義。實際上,BufferedReader在任何套接字上都沒有多少意義。 – 2012-04-05 23:18:52
使用頻道的想法是,它不僅可以讀取fron插座,還可以讀取鍵盤上的數據......所以即使使用頻道也不可能...... – 2012-04-05 23:39:32