Есть 2 класса, 1 на отправку, другой на прослушивание UDP. По какой то причине если запустить их на 2х машинах в одной сети, первый отправляет и второй получает нормально. Но если отправляет второй, то первый ничего не получает. Не могу понять как такое возможно. По идее нигде интерфейсы я не задавал и нет причин тому чтобы broadcast пакеты шли в одном направлении и не шли в другом. Может кто сможет подсказать куда копать?
Отправка:
public class Sender
{
UdpClient sendClient;
IPEndPoint sendEndPoint;
public Sender(int port_udp)
{
sendClient = new UdpClient();
sendEndPoint = new IPEndPoint(IPAddress.Broadcast, port_udp);
//- See more at: http://onlinedotnettutorials.blogspot.ru/2012/07/chat-application-without-server-udp.html#sthash.3irnhrOB.dpuf
}
public void Send(string message)
{
Byte[] Text = Encoding.ASCII.GetBytes(message);
sendClient.Send(Text, Text.Length, sendEndPoint);
}
~Sender()
{
sendClient.Close();
}
}
Получение:
public class Receiver
{
public delegate void onNewMessageContainer(string Text);
public event onNewMessageContainer onNewMessage;
UdpClient receiveClient;
IPEndPoint receiveEndPint;
//- See more at: http://onlinedotnettutorials.blogspot.ru/2012/07/chat-application-without-server-udp.html#sthash.3irnhrOB.dpuf
public Receiver(int port_udp)
{
receiveClient = new UdpClient(port_udp);
receiveEndPint = new IPEndPoint(IPAddress.Any, 0);
Thread rec = new Thread(ReceiveMessageFn);
rec.Start();
}
~Receiver()
{
NeedShutdown = true;
}
public bool NeedShutdown = false;
private void ReceiveMessageFn()
{
try
{
while (!NeedShutdown)
{
Byte[] receve = receiveClient.Receive(ref receiveEndPint);
string message = Encoding.ASCII.GetString(receve);
if (message != null || message.Length >0)
{
if (onNewMessage!=null )
{
onNewMessage(message);
}
}
}
Thread.CurrentThread.Abort();
}
catch (ThreadAbortException ex)
{
Console.WriteLine(ex.Message);
}
}
}