
UDP/IPでのソケット作成について(winsock)
開発環境VC++.NET、O/S WIN2000にてソケットプログラミング(winsock2.0)をしています。
コンソールプログラミングではありませんが、WindProcは持っていません。
UDPサーバーを作り、複数クライアントの対応をしたいと考えています。
クライアントAからの通信やりとり中に
クライアントBからの通信がきたら、そちらとも通信やりとりを(自動で)行いたい。
ここで問題なのが、クライアントAの要求ポートが15000で、
クライアントBの要求ポートも15000なのです。
同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、
やり方を工夫すれば、同一ポートでの複数クライアント対応は可能なのでしょうか。不可能なのでしょうか。
可能であれば、やり方、ヒント等教えてください。よろしくお願いします。
追記
(1)TCP/IPでは、同一ポートでソケット作成が可能でした。ネットで探したサンプルプログラムが
そのような動きをしていたのですが、UDPに書換えることはできませんでした。
http://eternalwindows.jp/network/winsock/winsock …
(2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が
上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、
fork()と同様の処理が可能になり、目的が達成できるでしょうか。
No.1ベストアンサー
- 回答日時:
まあ、複数プロセスとやり取りしたいのだったら、リッスンポートにアクセスして認証できた時点で別プロセス立ち上げて別ポートで通信始めるというのが簡単な気がします。
クライアントも認証が終了したらサーバーから伝えられたポートに変更すれば何台通信されても(まあ、限界は有りますけど)大抵受け付けられます。
ただし、そのソケットが開かないっていうのを回避するのであれば、リッスンポート増やすんだったと思いますけど。記憶はあいまいです。
回答ありがとうございます。
>リッスンポートにアクセスして認証できた時点で
今回はUDP/IPなので、listen()を使っていないのですが、「別プロセス立ち上げて別ポートで通信始める」というやり方に挑戦してみたいと思います。
>ソケットが開かないっていうのを回避するのであれば、リッスンポート増やす
今回はUDP/IPなので、listen()を使っていないので、リッスンポート増やす事はできないと思いますが、いかがでしょうか。
No.2
- 回答日時:
それを昔vxworksでやったことがあります。
UDP同一ポート複数接続は、不可能ではありません。
受信時にselectで待って、それから、スレッド生成してセッションの情報を送って
やればできるように思います。
自分が過去やったのは、上記のような並行サーバではなく、反復サーバでした(マイコンですので)が、
それで実装できています。
いずれも 15000番のソケット1つで実装できるのではないでしょうか。
>同じ既に開いているポートでソケット作成しようとしても、socket()関数はエラーを返してくるのですが、
これはできません。おわかりですよね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
winsockを使った通信での同時接...
-
Winsockで接続待ちタイムアウト...
-
エクセル VBA でのCOMポート...
-
CreateFile関数でCOMポートが開...
-
どうか、POSTでのファイル転送...
-
Connectエラーが出てしまう・・...
-
Macターミナルで実行中のプログ...
-
フレームワーク「4.8.1」で、[S...
-
パソコンの演算速度について
-
【C言語】再帰が時間がかかる...
-
powershell を使いカレントディ...
-
バックグラウンドのプロセスの...
-
winsockでソケット通信の開発を...
-
家電製品の電力周波数を変える機械
-
C# シリアル通信でデータ受信...
-
WaitForSingleObjectの使い方に...
-
ACCESS側からEXCELの書式を設定...
-
keycodeについて
-
C言語で、メモリを解放しないで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
ソケットのクローズについて
-
エクセル VBA でのCOMポート...
-
Winsockで接続待ちタイムアウト...
-
Socket通信の0バイト受信について
-
ソケットのrecvの戻り値が0
-
VB6のwinsockでconnectできない
-
UDP通信する時に、相手にどうや...
-
ソケットでクライアントのipア...
-
Connectエラーが出てしまう・・...
-
UdpClient 送信元のIPアドレ...
-
ソケット通信 同じポート番号...
-
recv関数でフリーズしてしまう
-
ソケットを用いた1対多通信につ...
-
closeされたsocketへの動作につ...
-
VB6‥ソケットについて
-
ソケット通信
-
vbでの232c接続プログラムについて
-
ネットワークプログラミングに...
おすすめ情報