0
final DatagramChannel dc = DatagramChannel.open();
        dc.configureBlocking(false);
        dc.socket().bind(localAddress);
        final SelDatagramChannel c = new SelDatagramChannel(dc, datagramListener);
--->>>>        final SelectionKey sk = dc.register(selector, SelectionKey.OP_READ);

DatagramChannel を登録しようとすると、マーケット ラインが永遠にハングします。

誰かが理由を知っていますか?

4

3 に答える 3

1

http://echelog.matzon.dk/logs/browse/java/1276898400にいくつかのチャットがありdc.register()、選択スレッドで呼び出す必要があると述べています。ただし、JavaDocはそれについてあまり具体的ではないようです。

どこかにリストを入れて、を呼び出すことでそれを行うと思いますselector.wakeup()。しかし、レジスターが成功するまでの時間が不明なタイミングの不具合がまだあります...

于 2012-01-23T23:19:59.457 に答える
0

上記のコードは、選択を行うスレッドで実行されますか?選択を行うのと同じスレッドで、Selectorにチャネルを登録する必要があると思います。

于 2011-06-14T19:03:38.443 に答える