UdpClient не получает никаких данных - PullRequest
0 голосов
/ 24 декабря 2018

Итак, это меня немного смутило.Я не могу придумать более простую программу для написания и тестирования.Я инициализирую UdpClient и вызываю Receive метод в отдельном потоке. Вот полный код:

UdpClient client = new UdpClient(1414);            
        byte[] data = new byte[320];
        IPEndPoint localpt = new IPEndPoint(IPAddress.Any,0);
        const string START_COMMAND = "START";
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

            client.Connect("192.168.1.12",33051);

            backgroundWorker1.RunWorkerAsync();

        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            try
            {
                while (client.Available > 0)
                {
                    data=client.Receive(ref localpt);
                }                    
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (!backgroundWorker1.IsBusy)
            {
                backgroundWorker1.RunWorkerAsync();
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            byte[] START_BYTES = Encoding.ASCII.GetBytes(START_COMMAND);
            client.Send(START_BYTES, START_BYTES.Length);
        }

После установки точки останова на while (client.Available > 0) я заметил, что client.Available всегда равен нулю.
То, что я пробовал:
1-Проверить, могу ли я пинговать удаленный хост (ОК, я могу проверить связь)
2-Проверить, есть ли какие-либо данные, доступные на сетевом интерфейсе(ОК использовал wireshark и видел входящие пакеты)
3-Проверьте, разрешено ли моему приложению проходить через брандмауэр (ОК Явно добавил мой exe для прохождения через брандмауэр Windows)
4-Отключить (удалить) любой брандмауэр или антивирусные программы(ОК)
Пока я не могу получить данные из моего приложения.В ходе дальнейшего расследования я выяснил, что можно отправлять данные (удаленный хост получает мои данные), но я никогда не могу их получить.

...