人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: westfish
●カテゴリ:コンピュータ
✍キーワード:Java ブロック
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● lains_you
●10ポイント

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


Java/Socket/サンプルコード

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


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

◎質問者からの返答

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

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

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

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


2 ● たーちゃん
●100ポイント

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

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

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

◎質問者からの返答

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

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

(中略)

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ