• 締切済み

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

osamuyの回答

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

IPネットワークの場合、経路情報からどのインタフェースを使うかを決定しますので、通信を開始する前にrouteコマンドとかで事前に経路情報を変更するといったプログラムにしてみては。 そんなことすると、なんか安定して通信できなさそうな気がしないでもないですが。

関連するQ&A

  • [winsock]多分レベル低い質問です

    インターネット越しにマシン間でUDPのテストをすべく、 http://www.geekpage.jp/programming/winsock/udp.php の受信プログラムと送信プログラムをまるまるコピーして、その後送信プログラムをちょっといじりました。 まず setsockopt(sock,SOL_SOCKET,SO_BROADCAST,(const char *)&TorF,sizeof(BOOL)); を追加し、 addr.sin_addr.S_un.S_addr = INADDR_BROADCAST; としました。 (TorF変数はBOOL型変数でTRUEで初期化してあります) そして送信プログラムと受信プログラムを別のマシン上に置いて、まず受信プログラムを起動して、送信プログラムを実行しましたが、受信側ではrecv関数待ちが続くだけで、いっこうにデータを受信できません。 備考: ローカルでテストを行ったところ、問題なく受信できました。 ブロードキャストでなく、直接IPを指定してマシン間で送受信をしても、やはりrecv関数でとまってしまいます。 そこで質問ですが、winsockを使用して別のPC間でUDP通信を行う場合、これ以外に設定が必要なのでしょうか。

  • Winsockでの送信(TCP)

    Winsockでの送受信プログラムを作成しています。 システム構成としてはサーバーが1つあって、それに複数のPC(クライアント)を接続します。 そしてチャットのようにやりとりを行うプログラムを作成しています。 しかし、チャットと違う点は、文字を、指定した相手(IPで指定)にのみ送信するということです。 自分で調べた結果UDPを用いれば簡単だということを知りました。(sendtoで送信先IPが指定できるから) しかし、TCPのほうが信頼性が高いということでTCPでやりたいと思いました。(勉強にもなるので) どなたかやり方をご教授お願いいたします。

  • winsockにて複数NIC環境でのBC送受信

    複数のNICが刺さっている環境で、UDPを利用したブロードキャスト送信(受信)についての疑問です。 パソコンAとBがあり パソコンAには1つのNIC(192.168.1.1) パソコンBには2つのNIC(192.168.2.2 と 192.168.3.3) ※それぞれサブネットマスクは 255.255.255.0 が同じネットワーク内に存在し、それぞれ INADDR_ANY を指定して bind されていたとします。 パソコンAから INADDR_BROADCAST を指定して snedto した場合、パソコンBの 192.168.2.2 と 192.168.3.3 の両方に同じパケットが届くのは正常な処理だと思うのですが、パソコンBから同じように snedto をすると、パソコンA には 192.168.2.2(メトリック値が低い方のアドレス) からのパケットしか届きません。 複数のNICがある場合に INADDR_BROADCAST を指定してパケットを送信すると、それぞれのNICから同じパケットが送信されるものと認識していたので、192.168.1.1 には 192.168.2.2 と 192.168.3.3 の両方から同じパケットが届くものかと思っていたのですが、優先NICからのみ届くというのが正常な動作なのでしょうか? もしそうであるのならば、1つのIPアドレスから同じパケットが複数届く場合の処理(自分のパソコンが複数NICの場合の処理)は必要になりますが、違うIPアドレスから同じパケットが届くケース(相手のパソコンが複数NICかどうか)は考えなくても良いということでしょうか? ご存知の方がいらっしゃいましたらご教示いただけると幸いです。

  • 無線LANカード2枚挿し時のUDPクライアントプログラミングについて。

    LinuxのUbuntu8.04を使用しているのですが、現在無線LANカード2枚挿ししている状態で、同じネットワーク内でIPアドレスを設定しています(192.168.0.10と192.168.0.11)。UDPクライアントプログラムでパケットを送信すると、インターフェイスを勝手に選んでしまうので、任意に「こっちの無線LANカードを使う!」という指定をするためにはどのようにプログラミングすればよいでしょうか? お願いします。

  • winsockについて

    http://www.katto.comm.waseda.ac.jp/~katto/Class/GazoTokuron/code/socket.html こちらのTCPのサンプルを使ってみたのですがうまくいきません。 クライアントを実行しても、サーバにメッセージが表示されません。 クライアントの dstAddr.sin_addr.s_addr にサーバのグローバルIPを指定したのですが、それであっていいますか?

  • C++ ソケット LAN2つ

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

  • UDPについて

    SOCKETを使ってUDPの通信プログラムを勉強中なんですが sendto(),bind()ではstruct sockaddr_in型の構造体を渡しますよね。その中の sockaddr_in.sin_addr.s_addr はIPアドレス(コンピュータ名)をバイナリ化したデータですよね。これって、sendとreceiveそれぞれでどのような役割をしているのでしょうか。 また、sendto()はデータを送信しているんですよね。receive側ではreceiveする前にbindしなくちゃいけないみたいなんですが、そもそもbind()って何をしてるんでしょうか。 よろしくお願い致します。

  • Winsock「アドレスが使用されています」

    UDPにてブロードキャスト送信されたメッセージを受信するプログラムを作成したいのですが、既に他のソフトで監視状態である場合、VB6にて作成したプログラムでもメッセージを受信することは可能でしょうか? ある処理が完了すると機器から処理完了のブロードキャストメッセージが送信されます。 通常は専用の常駐ソフトがメッセージを受け取り、パソコンに「処理が完了しました」的なメッセージが表示されるのですが、当方で作成したプログラムでもこのメッセージが取得できないか試行錯誤しています。 下記のサイトを参考にWinsockを使ったサンプルプログラムを作成してみました。 ttp://www.comel.or.jp/~akira/soft/udp_s1/udp_s1.html しかし、専用の常駐プログラムを終了しておくとうまく機器からのメッセージを受け取れるのですが、専用の常駐プログラムが起動していると、WinsockのBindメソッドでエラーとなってしまいます。(「アドレスが使用されています。」) 指定ポート当てに送られたブロードキャストメッセージを複数のプログラムで受け取ることはできないのでしょうか。 よろしくお願い致します。

  • UDP/IPでのソケット作成について(winsock)

    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/winsock04s.html (2)UNIXの場合fork()処理後に socket()作成 → bind()で同一ポートでの複数クライアント対応が  上手くいくらしいのですが、Windowsではマルチスレッド等をうまく活用すれば、  fork()と同様の処理が可能になり、目的が達成できるでしょうか。

  • 複数IPを設定してループバックで接続するには?

    NICに固定IP(192.168.~)を2つ設定してサーバーとして動作させます。 IPが1つの場合にはINADDR_ANYでbind()出来ますが、 IPが2つなので、自IP(192.168.~)でbind()するしかないと考えています。 ここで同じPC上でクライアントを動かすので、 LANケーブルが挿されていないケースも考えられます。 ところがLANケーブルを抜くと、bind()に失敗してしまいます。 他のPCでクロスケーブルでつなげると、2つともbind()は成功します。 なぜLANケーブルを抜くとbind()に失敗するのでしょうか? またLANケーブルを抜いてbind()に成功させる方法はありますか? どなたか詳しい方、ご教示ください。 WindowsXP SP3 Winsock2.0