Я добавляю функцию многоадресного прослушивания для разрабатываемого приложения. Устройство, к которому я подключаюсь, будет отправлять многоадресный пакет каждую секунду в определенном сценарии ios, и я бы хотел, чтобы пользователь мог прослушивать этот пакет (если он отправляется).
Я вижу, как многоадресные пакеты непрерывно отправляются с устройства с помощью Wireshark, поэтому я знаю, что они существуют, и я знаю, что использую правильную группу многоадресной рассылки и номер порта. Я попробовал дюжину разных способов, но мне не повезло, что мое приложение перехватило пакеты. Если я отправляю тестовый пакет многоадресной рассылки из самого приложения, оно получает его без проблем. Я пытался получить пакеты как asyn c и syn c, без изменений. Я действительно зашла в тупик и не уверена, что делаю неправильно. Каждый найденный мной пример наводит меня на мысль, что это должно сработать.
Мой класс прослушивателя udp для многоадресной рассылки:
class MulticastClient
{
private UdpClient client;
private IPEndPoint localEp;
private IPAddress multicastAddress;
public byte[] receivedData { get; private set; }
public MulticastClient(string multicastIP, int port)
{
localEp = new IPEndPoint(IPAddress.Any, port);
client = new UdpClient(AddressFamily.InterNetwork);
client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
client.ExclusiveAddressUse = false;
client.Client.Bind(localEp);
this.multicastAddress = IPAddress.Parse(multicastIP);
client.JoinMulticastGroup(this.multicastAddress);
}
public async Task Listen()
{
UdpReceiveResult result = await client.ReceiveAsync();
receivedData = result.Buffer;
}
}
Нажатие кнопки, которое запускает его:
MulticastClient client = new MulticastClient("239.255.0.1", 32768);
await Task.Run(async () =>
{
await client.Listen();
});
byte[] receivedData = client.receivedData;
if (receivedData != null)
{
//Here I display useful information about the packet to the user
}
Вот фрагмент захвата пакета, показывающий многоадресные пакеты, которые я не могу получить: Захват пакета Wireshark