Я пытаюсь получить простую связь UDP, работающую в моей локальной сети.Как сделать многоадресную рассылку UDP через локальную сеть в C#?
Все, что я хочу сделать, это сделать многоадресной рассылки для всех машин в сети
Вот мой представляемого код
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();
}
}
и вот мой приемный код
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());
}
}
}
Он работает отлично на моей локальной машине, но не по сети.
-Не кажется, что это брандмауэр. Я отключил его на обеих машинах, и он все еще не работает.
-It работает, если я делаю прямую отправку на жестко закодированный IP-адрес клиентской машины (т. Е. Не многоадресной рассылки).
Любая помощь будет оценена по достоинству.
У меня возникли проблемы с подключением к локальной сети. Без второго аргумента явного IP-адреса для прослушивания при вызове JoinMulticastGroup() это просто произвольный выбор виртуального драйвера ethernet, который я установил как часть Docker/Hyper-V, и присоединение к нему в группу многоадресной рассылки вместо моей реальной сети адаптер. Если у вас несколько сетевых адаптеров, вы должны указать IP-адрес для присоединения к многоадресной группе явно с перегрузкой метода, которая принимает IP-адрес в качестве второго аргумента. – MEverett