Как проверить, отправляются ли данные в порт с помощью C # UdpClient - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть программа, посредством которой данные отправляются с одного компьютера на другой по протоколу UDP.Проблема заключается в том, что отправляющая программа не всегда может отправлять данные, и я хочу, чтобы функция приема принимающей программы была включена ТОЛЬКО при отправке чего-либо на указанный порт (в данном случае 5000), в противном случае, когда пользователь пытается получить данныена порту с помощью UdpClient программа вылетает.Например:

    private const int listenPort = 5000;//receiving port
    UdpClient listener = new UdpClient(listenPort);//udclient instance
    IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, listenPort);
    public string received_data;
    public byte[] receive_byte_array;

    private void receiveButton_Click(object sender, RoutedEventArgs e)
    {
        receive_byte_array = listener.Receive(ref groupEP);
        received_data = Encoding.ASCII.GetString(receive_byte_array, 0, receive_byte_array.Length);
        textBox1.Text = received_data.ToString();

    }

Моя проблема заключается в том, что когда данные не отправляются, и пользователь нажимает receiveButton в главном окне, вся моя программа вылетает.Если быть точным, проблема здесь:
receive_byte_array = listener.Receive(ref groupEP);

Я пытался исправить проблему, поместив приведенную выше строку кода в оператор try catch, но даже тогда программа вылетает!Кажется, что просто попытка получить данные через порт IPEndpoint, когда ни один из них не вызывает ада.

Любые идеи относительно того, как я могу сначала проверить, отправляются ли данные в порт, и только затем позволить пользователю получать данные?Заранее спасибо.

1 Ответ

3 голосов
/ 27 сентября 2011

на основании вашего комментария я бы сказал, что программа зависает, потому что она ожидает получения данных.Ваш пользовательский интерфейс зависает, потому что вы начали синхронно прослушивать данные из потока пользовательского интерфейса, и теперь он занят прослушиванием данных, а не перерисовкой или обработкой ввода.чтобы исправить это, поместите бит прослушивания в отдельный поток или используйте метод async BeginReceive для получения данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...