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で質問しましょう!
似たような質問が見つかりました
- ルーター・ネットワーク機器 10Gbpsの恩恵 5 2022/11/16 15:48
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- CPU・メモリ・マザーボード Socket AM4マザーに、レガシーなインタフェースが多数あるのはなぜ? 3 2023/02/17 10:47
- ファイアウォール ポート開放で利用可能なTCP一覧の中に利用したいTCPが入ってない場合どうすればいいのでしょうか? 2 2022/09/12 10:31
- アプリ 某クラウドソーシングサービスの請負契約のキャンセル後に請求された遅延損害金 1 2022/04/08 00:29
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- サーバー (童顔♀です)webサイト納品後,記事更新をこちらでする場合どうやりますか....? 3 2023/08/09 04:44
- サーバー Webサイト構築フリーランスの案件受注について 1 2022/03/27 18:16
- プリンタ・スキャナー キャノンmp490プリンター【エラー番号5400】で【プリンタートラブルが発生しました。電源を入れ直 2 2023/07/24 17:45
- その他(開発・運用・管理) Windows serverでマルチキャスト通信の確認をしたいです。MicrosoftよりMPING 1 2023/03/31 01:05
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Winsockで接続待ちタイムアウト...
-
ソケットのクローズについて
-
Socket通信の0バイト受信について
-
recv関数でフリーズしてしまう
-
winsockでファイル転送
-
ソケット通信 同じポート番号...
-
Winsockプログラミング Connec...
-
同じLAN内パソコンのIPアドレス...
-
Connectエラーが出てしまう・・...
-
相手のIPアドレスを取得する方法
-
Javaのパケットキャプチャについて
-
C#でメッセンジャー作ってます...
-
closeされたsocketへの動作につ...
-
CreateFile関数でCOMポートが開...
-
Java(クライアント)とC言語(サ...
-
送信したデータの一部が文字化...
-
ブロッキングI/Oについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
エクセル VBA でのCOMポート...
-
UDP通信におけるbind関数について
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Winsockで接続待ちタイムアウト...
-
ソケットを用いた1対多通信につ...
-
ソケットでクライアントのipア...
-
ソケットのクローズについて
-
相手のIPアドレスを取得する方法
-
SIPがNATを越えられない理由
-
Socket通信の0バイト受信について
-
CreateFile関数でCOMポートが開...
-
Connectエラーが出てしまう・・...
-
同じLAN内パソコンのIPアドレス...
-
送信したデータの一部が文字化...
おすすめ情報