2011-09-27 68 views
0

我有一個程序,通過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。對不起,不明確,但我沒有任何例外。我的整個應用程序只是凍結,然後當下一個數據包發送時(從我的發件人程序),一切都很好。我的程序凍結它的方式感覺像是一個線程問題正在造成這種情況。 –

回答

3

根據您的評論我會說程序凍結,因爲它正在等待數據接收。您的用戶界面會凍結,因爲您已經開始從UI線程同步監聽數據,並且現在已經忙於監聽數據而不重新繪製或處理輸入。要解決這個問題,請將監聽位置於單獨的線程中,或使用異步方法接收數據。

相關問題