Neuroware
@Neuroware
Программист в свободное от работы время

Почему broadcast односторонний?

Есть 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);
            }
        }
    }
  • Вопрос задан
  • 315 просмотров
Решения вопроса 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
поставьте на машине, до которой не доходят UDP, Wireshark - и послушайте сеть. Убедитесь, что пакеты до второй машины доходят в принципе.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы