1

Unity を使用しており、特定のポートで着信する UDP パケットをリッスンしようとしています。Unity には、スクリプトが添付されたオブジェクトがあり、スクリプトは、UDP パケットから入ってくるデータを単純にリッスンして記録するように設計されています。スクリプトには、Start 関数があります。

public void Start() {
    //  Setup listener.
    this.mListener = new IPEndPoint(IPAddress.Loopback, 0);

    //  Setup background UDP listener thread.
    this.mReceiveThread = new Thread(new ThreadStart(ReceiveData));
    this.mReceiveThread.IsBackground = true;
    this.mReceiveThread.Start();
}

この関数は、IPEndPoint と受信スレッドをセットアップし、次のように定義されている受信スレッドを開始します。

private void ReceiveData() {
    try {
        //  Setup UDP client.
        this.mClient = new UdpClient(30020);
        this.mClient.Client.ReceiveTimeout = 250;

        //  While thread is still alive.
        while(Thread.CurrentThread.IsAlive) {
            try {
                //  Grab the data.
                byte[] data = this.mClient.Receive(ref this.mListener);

                //  Convert the data.
                /* REDACTED */

                //  Separate out the data.
                /* REDACTED */

                //  Store data in the DataSource.
                /* REDACTED */
            } catch(SocketException e) {
                Debug.Log(e.ToString());
                continue;
            }
        }
    } catch(Exception e) {
        Debug.Log(e.ToString());
    }
}

ただし、これを実行しようとすると、次の SocketException が引き続き発生します。

System.Net.Sockets.SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

このコードは何ヶ月も機能していましたが、この例外は見たことがありません。それは私には本当に意味がありません。ポートを変更してみましたが、効果がないようです。何が起こったのか、どのような変更を加えてこのように動作させたのか、正確にはわかりません。このプロジェクトを開始して以来、Unity を更新していません。他のプログラムが UDP パケットを送信していない可能性はありますか? UDP パケットの不足が原因でしょうか? この SocketException がログに表示される頻度、ReceiveTimeout プロパティに関連しています...

4

0 に答える 0