私は、java nioでUDPクライアントとUDPサーバを作ることにしました。 しかし、私はいくつかのことを理解していません。 ここでは、コード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からも読み込む場合は、 –
ストリーミングソケットを使用していません。あなたはデータグラムソケットを使用しています。これはあなたの受信がデータグラムパケットであることを意味します。 ReadLineはそのことをそれほど意識していません。実際、BufferedReaderはどんなソケットでもそれほど意味をなさない。 –
チャンネルを使うアイデアは、fronソケットを読むだけでなく、キーボードからデータを読み込む機会になるということでした。チャンネルでも可能ではありません.... –