• 締切済み

C++ ソケット LAN2つ

C++でソケット通信のプログラムを作成中で、アプリを動かすPCにはLANが 2つ付いていて片方をアプリ用、もう片方を別用途で使用しようとしています。 ここで質問ですが、アプリ側でどちらのLANを使用するか指定することってできるんでしょうか? それとも指定する必要ないんでしょうか? ソケットプログラムを作成する上では送信先のIPを指定したり、INADDR_ANYで受信したり、相手先の設定はあるのですが、自分のIPを指定するような設定が無いように思えます。 クライアントプログラムとしてはLANが2つあっても意識する必要はないのでしょうか?

みんなの回答

  • chie65535
  • ベストアンサー率43% (8522/19371)
回答No.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を別々にする」のは不可能です。

関連するQ&A

  • winsockで複数のLANカードを使用するには

    winsock初心者です。 TCPまたはUDPにて1枚のLANカードで通信するプログラムはよくあるのですが 複数のLANカードで通信する場合の参考プログラムがありません。 具体的には, UDPクライアントを作成する場合,指定したLANカード(IPアドレス)に生成したsocketとリンクして通信させたいのです。 bind()のsockname.sin_addr.s_addrにてINADDR_ANYではなくカードに設定したIPアドレスを設定すればよいのでしょうか? 同じ疑問がTCPクライアント作成でもあります。 この場合bind()ではなく,connect()で送信したいカードに接続されるサーバー側のIPアドレスを指定するということでしょうか? また2枚のカードを使用する場合,同じネットワークアドレス(192.168.0.XXX)は使用しない方が良いのでしょうか?(UDPブロードキャストだと両カードで送信してしまう?) 色々調べてますがこれだという回答がみつかりません 誰かご存知でしたら御教示願います。

  • LAN2枚ざしの時のソケット通信

    ソケット通信のプログラムを作成しています。 そのマシンはサーバー側なのですが LANカードが2枚刺さっている構成をしています (一応、LANカードごとにIP帯は違います) そのような場合は LANカードどちらかを「指定」する必要があると聞きました。 ですが、 調べてももそれらしい情報が出てきません。 よい情報が載っているページがありましたら よろしくお願いします。

  • ソケット通信

    現在プロセス間通信について学んでおり、 今はソケットを使ったプロセス間通信のプログラムを書いています。 そのソケット通信での質問なのですが、 2台のパソコンでINETドメインのソケットを使って プログラムを書いているのですが、 サーバーを実行した後、 別のパソコンでサーバー側のパソコンのIPアドレスを指定して クライアントを実行しようとすると、 connect:Connection timedout と表示されて実行できません。 同じプログラムをUNIXドメインで 1台のパソコンで実行すると正しく実行できます。 これは、プログラムに問題があるのでしょうか? それとも、ソケット通信を行う際には 何かパソコン等の設定が必要なのでしょうか? 教えてください。お願いします。 あと、セマフォを用いたプロセス間通信のサンプルプログラムが のっているホームページなどご存知でしたら、 教えていただけるとありがたいです。

  • ソケットを使ってメッセージを回す

    ソケットを使ってメッセージをリング状に回す通信を考えています。クライアントを一台指定し、サーバを複数立ち上げます。クライアントからメッセージを受け取ったサーバが別のサーバに送ることができません。その時BindExceptionError Address Already in use.とエラー表示されます。ソケット通信で、別のIPとポート番号を新しく生成して送ることができないのでしょうか。プログラム等を記述してもらえたら幸いです。どうかよろしくお願いします。

  • ソケット通信のデバッグ用ソフト

    こんにちは。 VC++6.0でソケット通信を使用してサーバーとクライアント間で データのやり取りをするプログラムを作成しています。 サーバーから送られたデータを確認できるソフト (つまり、指定のポートのバッファの状態を見れるソフト) を探しているのですが、なかなか見つけれません。 そのようなソフトはありますでしょうか? よろしくお願い致します。

  • c言語にてソケット通信

    linux環境のc言語にてソケット通信のプログラムを作成しています。 UDP通信にてヘッダを書き換える必要があるためrawソケットを使用し、複数ある ネットワークインターフェース(eth0、eth1など)を引数にして使用したいのですが、どうしたら使い分けできるので しょうか。

  • C# ソケット通信で相手に送信できるか事前にチェックする方法

    C# ソケット通信で相手に送信できるか事前にチェックする方法 いつもお世話になっております。 チャットのようなプログラムを作ろうと思い、ソケット通信のやり方を勉強しているのですが、どうしてもできないことがあります。 IPアドレスとポートを指定して、その相手先と通信できるかどうかをタイムアウト以外で知る方法です。 また、今回はサーバーを立てずに同じLAN内であればやり取りできるようにしたいと思っています。 できればLAN内の端末すべてに送信といったこともしたいのですが、TCPではできないのでしょうか。 分かる方がいましたらお願いします。

  • UNIX-C言語でのバーチャルIPの使用方法

    1ホストから、自IPアドレスを複数使用して、TCP/IPプロトコルでのクライアントのプログラムを作成したいのです。バーチャルIPの設定はifconfigで設定することは分かったのですが、クライアントからコネクションを設定するときにバーチャルIP機能で設定した特定の自IPアドレスを指定する場合は、どのようにコーディングすればよいのですか?教えてください。

  • ソケットインタフェースに関して

    クライアント/サーバ間でTCP/IPソケットのプロトコルを使用してネットワークを構築しようとしています。 TCP/IPソケットで、最初のクライアントAからconnectされた状態でクライアントBから同一ポートにconnectされた場合、クライアントBからのconnectを有効にしたいと考えています。本場合、他のクライアントからconnectされたことがTCP/IP層で検知可能でしょうか?また、アプリケーション層での作りは、どのようにすればよいか知っている方教えて下さい。

  • objective-c ソケットについて

    お世話になります。 現在、objective-cを使用してiPhoneのアプリを作成しているのですが、ソケット通信で行き詰っています。 CFSocketやstreamを使用して、データの送信はできているのですが、受信に失敗してしまいます。 送受信を可能にするためには、他に何が必要なのでしょうか? 環境はMac OSXです。 以上、よろしくお願い致します。

専門家に質問してみよう