• ベストアンサー

JAVAでノンブロッキングモードでの通信はできますか。

このたび、JAVAでTCP/IPプロトコルの通信を行うことになりました。今までは、UNIXでC言語で開発してきたのですが、その場合は、ノンブロッキングモードを使用してプログラムを作成しました。JAVAで、ノンブロッキングモードで通信することは、可能なのでしょうか。又、可能であれば、その方法は、ソケットオプションの設定で行うのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • liwet
  • ベストアンサー率72% (18/25)
回答No.1

Javaでは、受信用のThreadでデータを受信(ブロックされる)し、受け取ったらそのデータを自分で処理するか、別スレッドへ渡す、送信用のスレッドはまた別に起動している、というように、複数のThreadを使用して通信を行うのが普通です。 InputStream.available() を使うことで、入力ストリームからブロックせずに読み取れるバイト数を得ることもできますので、ループしながら available() で受信可能になるまで待つこともできます。 データが来たらイベントを起こす機能は、Java標準には無かったはずです。必要なら、自分で実装することになると思います。

tatsu99
質問者

お礼

早速の回答ありがとうございました。1つのソケットについて、出来れば送信と受信を1スレッドで行いたく、質問した次第です。送信時にブロックされるのは、問題ないのですが、受信時に、ブロックされることを回避したいと考えておりました。 >InputStream.available() を使うことで、入力ストリームからブロックせずに読み取れるバイト数を得ることもできます この機能を使えば、1スレッドで送受信出来ますので、この方法を採用したいと思います。ありがとうございました。

関連するQ&A