0

NIO を使用して、Android でサーバーを作成しようとしています。ServerChannel が承認された後、OP_READ と OP_WRITE の両方を登録しました。

ただし、有線のものは... while ループの中にあります。

SelectionKey key = (SelectionKey) iterator.next();
iterator.remove();

の中に:

if(key.isReadable()){
} else if(key.isWritable()){

isReadable が true を返さなかったようです。

私のクライアント コードは 2 つのスレッドです。1 つのスレッドは読み取り用で、もう 1 つのスレッドは書き込み用です。どうしてそうなのかしら..?Java NIO におけるクライアント側の扱いについて、どなたか参考にしていただけると助かります。

どうもありがとう、

4

2 に答える 2

3

通常、OP_WRITEを登録するべきではありません。ほとんどの場合、準備ができています。送信バッファがいっぱいであることを示す短い書き込み結果が得られた場合にのみ使用してください。一方、OP_READは、送信バッファにデータがある場合にのみ準備ができています。問題の瞬間にあったことを示唆するあなたの答えには何もありません。どういうわけか、これらの状態を頭の中で後ろから前に持っていないのではないかと思います。

于 2013-03-04T05:01:31.713 に答える
0

正しい方法である .register メソッドを理解するのを間違えました。

client.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);

私がしたことは:

client.register(selector, SelectionKey.OP_READ);
client.register(selector, SelectionKey.OP_WRITE);

したがって、後者が前者に取って代わりました。

于 2013-03-05T09:22:56.437 に答える