- 締切済み
非同期通信のサーバプログラムについて
はじめまして。 今、C#で非同期通信の勉強をしています。 ためしにローカルネットワーク内で文字を やり取りするチャットソフトを作成したのですが このサーバプログラムについて改良を加えたいので ご協力をお願いいたします。 このサーバプログラムをインターネット上のサーバとする場合なのですが 実験環境ではルータを使用しインターネットに接続しています。 ルータのポート開放等は設定してあります。 プログラムでサーバ自身のローカルIPアドレスと ポートを作成したソケットにBindすることで ルータが外部からきた接続要求をアドレス変換し サーバに届けることはできるのでしょうか? うまく説明できなくてわかりにくいかと思いますが よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- aris-wiz
- ベストアンサー率38% (96/252)
ルータを通して通信する場合、アプリケーション層では、 ルータに接続された外部からの通信に対して、 特定のホストに接続要求させることは不可能だと思います。 (ルータから、特定ホストに全ての通信を中継し、 特定ホストから接続要求を変換する事は可能かもしれませんが) このための仕組みとして、最近のルータには、 NAT(Network Address Translation)という機能があるわけです。 >ルータのポート開放等は設定してあります。 そもそも、これをしたなら必要ない事だと思うのですが。。。?
- sha-girl
- ベストアンサー率52% (430/816)
>プログラムでサーバ自身のローカルIPアドレスと >ポートを作成したソケットにBindすることで ルーターの外にあるPCから中のPCに接続する為には ルーターのWAN側のIP、つまりグローバルIPが必要です。 直接ルーターの内側のローカルIPを指定する事は出来ません。 >ルータが外部からきた接続要求をアドレス変換し >サーバに届けることはできるのでしょうか? アドレスをどのように変換するかはルーターの仕事です。 ですからルーターの設定次第です。 プログラムは関係ありません。 あと非同期通信ということはUDPでしょうか。 UDPのルーター越えはホールパンチングという手法が有名ですが 一旦ポート番号を保持する外部サーバーが必要になるのと ルーターの種類によっては使えない場合もあります。
補足
>あと非同期通信ということはUDPでしょうか。 TCPでの非同期です。 >プログラムは関係ありません。 イメージ的にプログラムがルータのWAN側まで出て行って処理をするのかなと (雑居ビル内(ローカルネットワーク)の 飲み屋(サーバプログラム)が 来てくれた客(接続要求)をするのに 道(WAN)まででていってるようなイメージ。) もしくはNATを使っての場合は (ビルにいる案内員(NAT) が案内してくれるので飲み屋(サーバプログラム) は店舗の中で待ってるだけでいいのかな というイメージ。) あほうなことを言ってるかもしれません・・・。orz
補足
質問の仕方が間違っていたかもしれません。 Bindするときの引数がわからなかったのです。 NATを利用しているのであればサーバのソケットで バインドするのは自身に割り振られたIPアドレス (この場合ローカル内のIP)でも問題ないのかなと 思いまして・・・。 わけのわからないことを言ってたらごめんなさい。