Я пытаюсь настроить автоматическое обнаружение с использованием многоадресной передачи UDP и использую некоторый пример кода из Интернета.Кажется, это работает нормально, когда я запускаю клиент и сервер на одной машине, но когда я запускаю их на разных машинах, либо с машиной, работающей в виртуальной машине на моем компьютере (virtualBox), либо на других «реальных» машинах насеть, тогда другие машины, кажется, никогда не получают сообщения, передаваемые в широковещательном режиме.
После некоторого поиска в Google кажется вероятным виновником будет маршрутизатор (SpeedTouch 780), который может отбрасывать пакеты.Как я могу проверить, так ли это?Есть ли у них другие вещи, которые я могу проверить, чтобы попытаться отследить проблему?Может ли это быть что-то совсем другое?
код:
код сервера
using System;
using System.Net.Sockets;
using System.Text;
internal class StockPriceMulticaster
{
private static string[] symbols = {"ABCD", "EFGH", "IJKL", "MNOP"};
public static void Main ()
{
using (UdpClient publisher = new UdpClient ("230.0.0.1", 8899))
{
Console.WriteLine ("Publishing stock prices to 230.0.0.1:8899");
Random gen = new Random ();
while (true)
{
int i = gen.Next (0, symbols.Length);
double price = 400*gen.NextDouble () + 100;
string msg = String.Format ("{0} {1:#.00}", symbols, price);
byte[] sdata = Encoding.ASCII.GetBytes (msg);
publisher.Send (sdata, sdata.Length);
System.Threading.Thread.Sleep (5000);
}
}
}
}
и клиент:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class StockPriceReceiver{
public static void Main(){
UdpClient subscriber = new UdpClient(8899);
IPAddress addr = IPAddress.Parse("230.0.0.1");
subscriber.JoinMulticastGroup(addr);
IPEndPoint ep = null;
for(int i=0; i<10;i++){
byte[] pdata = subscriber.Receive(ref ep);
string price = Encoding.ASCII.GetString(pdata);
Console.WriteLine(price);
}
subscriber.DropMulticastGroup(addr);
}
}
РЕДАКТИРОВАТЬ
Похоже, что по какой-то причине он публикует UDP-пакеты только на сетевом интерфейсе VirtualBox, а не на беспроводной сети, к которой подключены все машины.Просто нужно выяснить, как сделать так, чтобы это не делалось ... Так что вместо этого добавили резолюцию в ответ ...