У меня есть приложение, в котором мне нужно получать одноадресные пакеты UDP с любого IP-адреса (на конкретном порту), но я хотел бы знать IP-адрес отправителя полученного пакета.Я создал сокет и связал его с помощью следующего кода:
Socket SocketLocal;
EndPoint epReceive;
int UCPort = 1000;
byte[] Buffer = new byte[1500];
SocketLocal = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
SocketLocal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
// Bind Socket
epReceive = new IPEndPoint(IPAddress.Any, UCPort );
SocketLocal.Bind(epReceive);
SocketLocal.BeginReceiveFrom(Buffer, 0, Buffer.Length, SocketFlags.None, ref epReceive, new AsyncCallback(RxCallBack), Buffer);
Обратный вызов выглядит следующим образом:
public void RxCallBack(IAsyncResult aResult)
{
try
{
byte[] receivedData = new byte[1500];
receivedData = (byte[])aResult.AsyncState;
// I process/intepret the received data
// ...
// I have a list box where I simply want to display
// the sender's IP address
lstBox.Items.Add(SocketLocal.LocalEndPoint.ToString()));
// Here I simply get 0.0.0.0:<port number>
// If I modify SocketLocal.LocalEndPoint.ToString above to SocketLocal.RemoteEndPoint.ToString it throws an exception
Buffer = new byte[1500];
SocketLocal.BeginReceiveFrom(Buffer, 0, Buffer.Length, SocketFlags.None, ref epReceive, new AsyncCallback(RxCallBack), Buffer);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
} // End of RxCallBack
Это работает хорошо, так как я могу получать данные, отправленные с любогоIP на мой компьютер.Тем не менее, я хотел бы знать IP-адрес отправителя.
Когда я пытаюсь извлечь IP-адрес отправителя, я просто получаю «0.0.0.0», что имеет смысл, учитывая, что я установил Socket на IPAddress.any
Должен быть способ найтиIP-адрес отправителя.Я искал и пробовал все различные варианты безрезультатно.Кто-нибудь может дать какое-нибудь руководство?