我目前正在开发一个应该通过 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
谢谢!