JavaでDatagramSocketを使って通信をしているのですが、DatagramSocketのreceiveを呼ぶとブロックが起きてしまいます。ブロックされない方法はありますか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/04/19 13:30:14
  • 終了:2007/04/20 11:00:20

回答(2件)

id:lains_you No.1

lains_you回答回数50ベストアンサー獲得回数102007/04/19 14:57:34

ポイント10pt

 DatagramSocket.receiveメソッドを呼んでから復帰するまでの間に他の処理を行いたいのであれば、スレッドを使用するのが妥当かと思います。


Java/Socket/サンプルコード

http://discypus.jp/wiki/?Java%2FSocket%2F%A5%B5%A5%F3%A5%D7%A5%E...


 上記のサイトの「UDP: DatagramPacket, DatagramSocket」において、別スレッド中にreceiveメソッドを実行しているサンプルがあります。参考になるのではないでしょうか。

id:westfish

>DatagramSocket.receiveメソッドを呼んでから復帰するまでの間に他の処理を行いたいのであれば

いや、そうではなくて、非ブロッキングモードで通信がしたいのです。selectに相当する物がないのかと思って質問しました。

http://www.itarchitect.jp/technology_and_programming/-/19362-6.h...

これでできそうです。後でじっくり読んでみようと思っています。

2007/04/19 22:14:43
id:tarchan No.2

たーちゃん回答回数200ベストアンサー獲得回数22007/04/20 02:11:43

ポイント100pt

New I/Oを使うとよいでしょう。

「New I/Oで高速な入出力」第1回 New I/Oをご存じですか:ITpro

http://itpro.nikkeibp.co.jp/article/COLUMN/20060403/234326/

id:westfish

おおお、すばらしい、まさにこれです。

>UNIXにはselectというシステムコールが存在します。このselectシステムコールの機能をJavaで実現したのがSelectorクラスなのです。

(中略)

>できるだけスレッドの数は減らしたいところです。

>そこで登場するのが,Selectorクラスです。

2007/04/20 10:44:21

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません