0

データを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);

上記のコード行をtrycatchステートメントに入れて問題を解決しようとしましたが、それでもプログラムがクラッシュします。何も起こらないときにIPEndpointポートでデータを受信しようとしているだけのようです。

データがポートに送信されているかどうかを最初に確認してから、ユーザーがデータを受信できるようにする方法についてのアイデアはありますか?前もって感謝します。

4

1 に答える 1

3

あなたのコメントに基づいて、データの受信を待っているため、プログラムがフリーズしていると思います。UIスレッドから同期的にデータのリッスンを開始し、データのリッスンに専念し、入力の再描画や処理を行わないため、ユーザーインターフェイスがフリーズします。これを修正するには、リスニングビットを別のスレッドに配置するか、非同期のBeginReceiveメソッドを使用してデータを受信します。

于 2011-09-27T12:33:40.627 に答える