C# 在C中使用套接字的主动网络接口#
我目前正在开发一个windows应用程序,它应该通过WiFi与远程嵌入式系统进行通信。Windows应用程序正在发送一条广播消息,远程装置正在接收该消息并从中提取发送方IP。然后,远程装置将应答发送回提取的IP。问题是,当发送广播消息时,C#正在使用无线网络连接,但当我打开一个套接字以侦听答案(或将消息发送到指定地址)时,它正在使用局域网连接。由于这些接口具有不同的IP地址,windows应用程序将无法从远程接收答案 所以我的问题是,为什么C#对不同的套接字使用不同的网络接口,有没有办法强迫程序对所有套接字使用相同的接口 这是发送广播信息的代码C# 在C中使用套接字的主动网络接口#,c#,sockets,networking,interface,wifi,C#,Sockets,Networking,Interface,Wifi,我目前正在开发一个windows应用程序,它应该通过WiFi与远程嵌入式系统进行通信。Windows应用程序正在发送一条广播消息,远程装置正在接收该消息并从中提取发送方IP。然后,远程装置将应答发送回提取的IP。问题是,当发送广播消息时,C#正在使用无线网络连接,但当我打开一个套接字以侦听答案(或将消息发送到指定地址)时,它正在使用局域网连接。由于这些接口具有不同的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
谢谢大家! 如果要强制它在无线适配器上接收,请设置一个指向无线适配器的更具体的IPEndPoint:
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("wireless adapter IP here"), 9999);
IPAddress。据我所知,任何
都应该监听所有接口,而不仅仅是选择优先级最高的接口,因此您应该按照设置无线适配器的方式获取响应数据包。我想您可以尝试使用上面的代码强制它,如果它仍然不起作用,那么您的响应UDP消息只是在某个地方被吞没了
在发送广播消息之前,请确保将套接字设置为侦听响应,否则您可能会在侦听器设置之前收到竞争条件下的响应。当您说
局域网连接时
我想您的意思是*有线网络连接?无线也可以连接到局域网。如果您正确配置了IP、子网掩码和网关,那么它应该能够自动将连接路由到您的目标地址。我指的是ipconfig中名为Local Area connection的网络接口。它通过电线连接到路由器。我不知道IP、子网掩码和网关是否配置正确,如何检查?谢谢您的回答。我意识到我的另一张网卡工作不正常。我通过发送多播而不是广播来解决这个问题,这样消息就从正确的网络接口(与远程设备进行所有其他通信的接口)发送。