C# 如何使用UDPClient类从UDP数据包中检测目标IP地址
我正在开发一个应用程序,它在客户端应用程序和服务器应用程序之间通过UDP发送和接收消息 在我的服务器上,我有4个不同的网卡,例如nic1=169.524.15.12、nic2=169.524.15.65等。我的DNS指向nic2。客户端应用解析DNS并将数据发送到nic2。然而,我的服务器应用程序有时会从nic1响应客户端 我正在使用UdpClient侦听传入的数据包 这是我的服务器应用程序代码:C# 如何使用UDPClient类从UDP数据包中检测目标IP地址,c#,udp,udpclient,C#,Udp,Udpclient,我正在开发一个应用程序,它在客户端应用程序和服务器应用程序之间通过UDP发送和接收消息 在我的服务器上,我有4个不同的网卡,例如nic1=169.524.15.12、nic2=169.524.15.65等。我的DNS指向nic2。客户端应用解析DNS并将数据发送到nic2。然而,我的服务器应用程序有时会从nic1响应客户端 我正在使用UdpClient侦听传入的数据包 这是我的服务器应用程序代码: objSocketServer = new Socket(AddressFamily.InterN
objSocketServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
EndPoint objEndPointOfServer = new IPEndPoint(IPAddress.Any, 5000);
objSocketServer.Bind(objEndPointOfServer);
objSocketServer.BeginReceiveFrom(_arrReceivedDataBuffer, 0, BUFSIZE - 1, SocketFlags.None, ref objEndPointOfServer, DoReceiveFromClient, objSocketServer);
private void DoReceiveFromClient(IAsyncResult objIAsyncResult)
{
try
{
// Get the received message.
_objSocketReceivedClient = (Socket)objIAsyncResult.AsyncState;
EndPoint objEndPointReceivedClient = new IPEndPoint(IPAddress.Any, 0);
// Received data.
int intMsgLen = _objSocketReceivedClient.EndReceiveFrom(objIAsyncResult, ref objEndPointReceivedClient);
byte[] arrReceivedMsg = new byte[intMsgLen];
Array.Copy(_arrReceivedDataBuffer, arrReceivedMsg, intMsgLen);
// Client port.
// Get and store port allocated to server1 while making request from client to server.
int _intClientServer1Port = ((IPEndPoint)objEndPointReceivedClient).Port;
// Send external ip and external port back to client.
String strMessage = ((IPEndPoint)objEndPointReceivedClient).Address.ToString() + ":" + _intClientServer1Port.ToString();
byte[] arrData = Encoding.ASCII.GetBytes(strMessage);
objSocketServer.SendTo(arrData, arrData.Length, SocketFlags.None, objEndPointReceivedClient);
// Start listening for a new message.
EndPoint objEndPointNewReceivedClient = new IPEndPoint(IPAddress.Any, 0);
objSocketServer.BeginReceiveFrom(_arrReceivedDataBuffer, 0, _arrReceivedDataBuffer.Length, SocketFlags.None, ref objEndPointNewReceivedClient, DoReceiveFromClient, objSocketServer)
}
catch (SocketException sx)
{
objSocketServer.Shutdown(SocketShutdown.Both);
objSocketServer.Close();
}
}
}
在代码中,是否有任何方法可以检测到我已在服务器上的哪个IP地址上接收到数据包,并使用相同的IP地址进行回复
可以说,我也可以在服务器应用程序中解析DNS,并确保我的服务器应用程序只侦听客户端应用程序发送数据包的IP,但是,当我的服务器应用程序必须侦听>1 IP时,这种方法将不适用于我。SendTo命令将为提供的目标地址使用适当的NIC aka本地接口。系统指标决定了这一点。这不是您在代码中设置的内容。要查看系统指标,请运行命令netstat-rn并查看Interface列。如果你打领带的话,你需要调整一下。您也可以使用GetAllNetworkInterfaces在代码中枚举它们,并绑定到特定的接口(如果您需要的话)