私は現在、WiFi経由でリモート組み込みシステムと通信することになっているWindowsアプリケーションに取り組んでいます。Windows アプリケーションは、リモート ユニットが受信し、送信者 IP を抽出するブロードキャスト メッセージを送信しています。次に、リモート ユニットは、抽出された IP に応答を返します。問題は、ブロードキャスト メッセージを送信するときに C# がワイヤレス ネットワーク接続を使用していることですが、Socket を開いて応答をリッスンする (または指定されたアドレスにメッセージを送信する) ときに、ローカル エリア接続を使用していることです。これらのインターフェイスには異なる IP アドレスがあるため、Windows アプリケーションはリモートからの応答を受け取りません。
私の質問は、C# が異なるソケットに対して異なるネットワーク インターフェイスを使用するのはなぜですか? プログラムがすべてのソケットに対して同じインターフェイスを使用するように強制する方法はありますか?
ブロードキャストメッセージを送信するためのコードは次のとおりです
sockB = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp); //Create a UDP socket
sockB.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1); //Enable broadcast on socket
IPEndPoint briep = new IPEndPoint(IPAddress.Broadcast, 9584); //Relate a port to the broadcast address
byte[] dat = { 0xAD, 0xEE, BRDCST_CMND, (byte)(0xAD ^ 0xEE ^ BRDCST_CMND) }; //Put in buffer
sockB.SendTo(dat, briep); //Broadcast data
これがリモコンからの回答を聞くためのコードです
sockC = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); //Create an udp socket
sockC.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1); //set timeout to 5 ms
sockC.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, 1);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9999); //set up an "any" ip address and associate it with port 9854
EndPoint ep = (EndPoint)(iep); //Make an endpoint out of previous association
sockC.Bind(iep); //Bind the created socket to listen on port 9854
byteRecv = sockC.ReceiveFrom(data, ref ep); //Receive on socke
ありがとうございました!