みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C++ ソケット LAN2つ

C++でソケット通信のプログラムを作成中で、アプリを動かすPCにはLANが
2つ付いていて片方をアプリ用、もう片方を別用途で使用しようとしています。

ここで質問ですが、アプリ側でどちらのLANを使用するか指定することってできるんでしょうか? それとも指定する必要ないんでしょうか?

ソケットプログラムを作成する上では送信先のIPを指定したり、INADDR_ANYで受信したり、相手先の設定はあるのですが、自分のIPを指定するような設定が無いように思えます。

クライアントプログラムとしてはLANが2つあっても意識する必要はないのでしょうか?

投稿日時 - 2018-02-16 09:08:31

QNo.9429580

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>LANが2つ付いていて片方をアプリ用、もう片方を別用途で使用しようとしています。

そういう「NICを選択的に使用する」と言うのは不可能です(NIC=ネットワークインターフェースカードの事。質問者さんが言う「LAN」のこと)

>ここで質問ですが、アプリ側でどちらのLANを使用するか指定することってできるんでしょうか?

静的ルーティングされていないなら、使用するNICは「Metric値が小さい方から順」になります。

静的ルーティングされている場合は「宛先IPアドレスによって、どのNICが使われるかが決定」されます。

静的ルーティングに「ネットワークアドレスxxx.xxx.xxx.xxxはNIC-Aの先にある、ネットワークアドレスyyy.yyy.yyy.yyyはNIC-Bの先にある」と書いてあれば、宛先がxxx.xxx.xxx.xxxのパケットはNIC-Aに、宛先がyyy.yyy.yyy.yyyのパケットはNIC-Bによって送出されます。

宛先が同じIPの場合、NICを選択的に選ぶ事は出来ません。

>それとも指定する必要ないんでしょうか?

「指定する必要がない」のではなくて「指定する事が出来ない」のです。

>自分のIPを指定するような設定が無いように思えます。

自己のIPアドレスは「Metric値や、静的ルーティングによって適切に自動的に選ばれたNICに付いているIPアドレス」になります(このIPアドレスは、ローカルにしか通用しない「LANアドレス」であり、グローバルIPアドレスではありません)

つまり「IPアドレスは、適切に自動的に選ばれる」のであり「NICも、適切に自動的に選ばれる」ようになっていて、アプリケーション側で選択する事は不可能です。

「アプリ」と「別用途のもう片方」で「送信先のIPアドレスが同じ」なのであれば「自動的に同じNICが選択される」ので「用途によってNICを別々にする」のは不可能です。

投稿日時 - 2018-02-16 10:15:53

あなたにオススメの質問