如何检查数据是否被发送到一个端口与C#UdpClient

问题描述:

我有一个程序,通过UDP从一台计算机发送数据到另一台计算机。问题是数据可能并不总是由发送程序发送,我希望只有当某个事件被发送到指定的端口(在这种情况下为5000)时才启用接收程序的接收功能,否则当用户尝试接收数据时在端口上使用UdpClient程序崩溃。例如:如何检查数据是否被发送到一个端口与C#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端口上的数据,当没有人提到地狱时。

有关如何首先检查数据是否被发送到端口并只允许用户接收数据的任何想法?提前致谢。

+0

请分享一下例外情况,对于我现在知道的情况,现在可以是其他的东西 – mtijn

+0

@mtjin。对不起,不明确,但我没有任何例外。我的整个应用程序只是冻结,然后当下一个数据包发送时(从我的发件人程序),一切都很好。我的程序冻结它的方式感觉像是一个线程问题正在造成这种情况。 –

根据您的评论我会说程序冻结,因为它正在等待数据接收。您的用户界面会冻结,因为您已经开始从UI线程同步监听数据,并且现在已经忙于监听数据而不重新绘制或处理输入。要解决这个问题,请将监听位置于单独的线程中,或使用异步方法接收数据。