Sto cercando di ottenere alcune semplici comunicazioni UDP che funzionano sulla mia rete locale.Come fare un multicast UDP attraverso la rete locale in C#?
Tutto quello che voglio fare è fare un multicast a tutte le macchine sulla rete
Ecco il mio invio di codice
public void SendMessage(string message)
{
var data = Encoding.Default.GetBytes(message);
using (var udpClient = new UdpClient(AddressFamily.InterNetwork))
{
var address = IPAddress.Parse("224.100.0.1");
var ipEndPoint = new IPEndPoint(address, 8088);
udpClient.JoinMulticastGroup(address);
udpClient.Send(data, data.Length, ipEndPoint);
udpClient.Close();
}
}
e qui è il mio codice di ricezione
public void Start()
{
udpClient = new UdpClient(8088);
udpClient.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"), 50);
receiveThread = new Thread(Receive);
receiveThread.Start();
}
public void Receive()
{
while (true)
{
var ipEndPoint = new IPEndPoint(IPAddress.Any, 0);
var data = udpClient.Receive(ref ipEndPoint);
Message = Encoding.Default.GetString(data);
// Raise the AfterReceive event
if (AfterReceive != null)
{
AfterReceive(this, new EventArgs());
}
}
}
Funziona perfettamente sulla mia macchina locale ma non attraverso la rete.
-Non sembra essere il firewall. L'ho disabilitato su entrambe le macchine e ancora non ha funzionato.
-Si funziona se invio direttamente all'indirizzo IP codificato della macchina client (ovvero non multicast).
Qualsiasi aiuto sarebbe apprezzato.
Ho avuto problemi a farlo funzionare anche su LAN. Senza il secondo argomento di un indirizzo IP esplicito da ascoltare quando si chiama JoinMulticastGroup(), è stato arbitrariamente scelto un driver ethernet virtuale che avevo installato come parte di Docker/Hyper-V e che si collegava al gruppo multicast invece della mia vera ethernet adattatore. Se si dispone di più di una scheda di rete, è necessario specificare l'indirizzo IP per unirsi esplicitamente al gruppo multicast con l'overload del metodo che accetta un indirizzo IP come secondo argomento. – MEverett