0

着信パケットをリッスンするために、提供されたエンドポイントにバインドされた UdpClient を使用しています。私のコードは次のとおりです。

        ... 
        string myIpAddress = "192.168.1.100";
        int myPort = 50000;

        IPEndPoint selfEndPoint = new IPEndPoint(IPAddress.Parse(myIpAddress), myPort);
        IPEndPoint anySourceEndPoint = new IPEndPoint(IPAddress.Any, 0);

        UdpClient receivingClient = new UdpClient();
        receivingClient.Client.Bind(selfEndPoint); // Can throw.

        receivingClient.Receive(ref anySourceEndPoint);
        ... 

IP アドレスが '192.168.1.100' のインターフェイスが存在しない場合は、SocketException` がスローされます (予想どおり)。このようなインターフェイスが存在する場合、UdpClient は正常にバインドされ、着信パケットを待ちます。私の問題は次のとおりです。

Receiveでブロックしていて、インターフェイスのアドレスが利用できなくなった場合、どのように検出できますか?

たとえば、アプリケーションが実行中で、着信パケットを待機しているとします。次に、ユーザーはシステムのネットワーク インターフェイスを無効にします。アプリケーションは、パケットを受信できない場合でも、パケットを受信できると想定しています。

私がやってきたクローズはReceiveTimeout、クライアントに を設定し、このタイムアウトが発生したときに UdpClient を再作成/バインドすることです。代替案またはその他の提案を期待しています。

4

1 に答える 1