Я хочу получить сообщение UDP, которое было передано на 255.255.255.255 с UdpClient
в Unity. Но какую бы комбинацию настроек я ни пробовал, он получает сообщение только в том случае, если оно было отправлено с локального хоста. Я пробовал примерный код из этих ресурсов, не работал:
- https://gist.github.com/michaelosthege/857acac92b8ee689a6bb30d5bf23d9f6
- Пример C# UDP Broadcast и получения
- UdpClient получает широковещательный адрес
- Как выполнить обнаружение сети с помощью широковещательной рассылки UDP
Я запускаю код под задачей.
private void Listen()
{
udpClient = new UdpClient(9000);
//udpClient.Client.Bind(new IPEndPoint(IPAddress.Any, 9000));
//udpClient.EnableBroadcast = true;
//udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
//udpClient.ExclusiveAddressUse = false;
//broadcastAddress = new IPEndPoint(IPAddress.Any, 9000);
//udpClient.Client.Bind(broadcastAddress);
//udpClient.Connect(broadcastAddress);
//var from = new IPEndPoint(IPAddress.Any, 9000);
var from = new IPEndPoint(0, 0);
while (true)
{
var receive = udpClient.Receive(ref from);
var msg = Encoding.UTF8.GetString(receive);
Debug.Log($"Received message \"{msg}\"");
Debug.Log($"from {from} ({from.Address})");
}
}
Я использовал несколько закомментированных строк в комбинации.
- Когда я отправляю что-то из того же приложения на 255.255.255.255 с другим
UdpClient
на порту 9000, это работает, как и ожидалось. - When I send something from any other machine on the network to 255.255.255.255
- any machine in the network receives it (checking with PacketSender on osx devices)
- На машине Windows, на которой я разрабатываю это приложение, сообщение получено UdpSenderReceiver
- Но udpClient изнутри Unity ничего не получает — и Firewall мне ничего не спрашивает и не говорит.
В чем тут может быть дело?