プロが教える店舗&オフィスのセキュリティ対策術

winsockを使ったUDPのプログラムを作成しています。開発環境はVC.NET/win2000です。
UDPサーバで受信側のプログラムとして、
  ・sin_port に受信ポート番号を設定
  ・socket
  ・bind
という流れでソケット生成をしています。

上記の流れを1プロセスで1度行って、1プロセスにつき1ポートに対応した
メッセージを受信しているのですが、
1プロセスで複数ポートを対象に受信を行うことは可能なのでしょうか?
  ・ポート番号を複数指定する
  ・ソケットを複数生成する など・・・ 

方法がわかりません。
すみませんが回答をよろしくおねがいします。

A 回答 (1件)

> 1プロセスで複数ポートを対象に受信を行うことは可能なのでしょうか?


可能だと思いますよ。

## 私は UDP は直接扱ったことが無いので、確信を持っては回答できませんが..

確か UDP のデータグラムは「HOST IP + ポート番号」の組で識別されたと思うので、ポート番号(と言うか、別のポート番号で開いたソケット)は複数持つ必要があると思います。

そして、それぞれのソケットを別々のスレッドで待機すれば良いのでは無いでしょうか?

もしくは、シングルスレッドで行きたいのあれば、UNIX の場合は select() がお決まりですが、Windows の場合はどうでしょうね。まあそれに順ずるものが多分あるはずです。

## 通常の待機であれば お決まりの WaitFor... 系の API でしょうが、WinSock のハンドルは HANDLE では無く、SOCKET なのでそのまま待機できないかも知れません。その場合、WSA... 系の API を調べてみてください。
## なんか、WSAAsyncSelect なんていかにもな名前が目に付いたけどどうなんだろ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
回答を参考に調べて動かしてみたら、できました。

・winsockにもselectがあります。
・シングルスレッドで複数のソケットを作成しました。
・selectを使う事により、別のソケットをブロックすることなく受信が可能なようです。

ソケット数に限界値があるのかどうかは分かりませんが、
取り合えず希望通りの動作が可能なようでした。
(64ソケット/ポートまで正常動作させることができました。)

解決のヒントとなる回答を頂き感謝します。

お礼日時:2005/07/21 17:58

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!