0

私のデータグラム ソケットは、設定されているにもかかわらず SocketTimeout をスローしていません。これを解決する方法がわかりません。コードは次のとおりです。問題は、このソケット接続に沿ってメッセージを受信しない場合、最初の実行でタイムアウトになることです。ただし、メッセージを数回正常に受信し、後で .receive が呼び出されたときにタイムアウトしません。

DatagramSocket serverSocket = new DatagramSocket(serverSyncPort);
serverSocket.setSoTimeout(200);

while(true)
{
        receiveData = new byte[1024];
        receivePacket = new DatagramPacket(receiveData,receiveData.length);
        try
        {
            serverSocket.receive(receivePacket);
        }
        catch(SocketTimeoutException e) {}
}
4

2 に答える 2

0

この DatagramSocket に対する receive() の呼び出しは、setsockettimeout の時間だけブロックされます。タイムアウトになると、java.net.SocketTimeoutException が発生しますが、DatagramSocket は引き続き有効です。ここでは、タイムアウトとして 200 ミリ秒が設定されており、動作するはずです。

どの環境で試していますか? SocketException は、solaris/Linux 環境で問題なく発生するため、これは Windows で予期される動作である可能性があります。

于 2012-12-12T04:12:15.053 に答える
0

Javadocから

タイムアウトになると、java.net.SocketTimeoutException が発生しますが、DatagramSocket は引き続き有効です。このオプションを有効にするには、ブロッキング操作に入る前に有効にする必要があります。 タイムアウトは > 0 でなければなりません。ゼロのタイムアウトは、無限のタイムアウトと解釈されます。

上記の引用で強調表示されているように、タイムアウトが適切に有効になっているかどうかを確認します。

また、後で の値をチェックして、getSoTimeout()それが何であるかを確認します。

于 2012-12-12T03:32:41.737 に答える