2016-08-04 2 views
0

以下のコードでは、スレッド(UIスレッドではない)でソケットからデータを読み取ろうとしています。しかし、各状態では、3秒以上かかるとwhileループを中断したい。どうやってやるの?Javafx、ソケットから読み取るための特定のタイムアウトを確認する

あなたは(あなたがそれからの読み取りを試みる前に)ソケットにコード

System.out.println(loginMsg);//send login message to server 
while ((fromServer = sInput.readLine()) != null) { 
    switch (state) { 
     case 0: 
      if (fromServer.equals("*2*1#")) //Login was successful 
      { 
       sOutput.println(msg); // send another message to server to enter some data into database 
       state = 1; 
      } else if (fromServer.equals("*2*0#")) //Login was not successful 
      { 
       motor1CommandString = "access denied"; 
       state = 3; 
      } 
      break; 
     case 1: 
      if (fromServer.equals("*6*1#")) 
      { 
       motor1CommandString = "message sent"; 
       state = 2; 
      } else if ((fromServer.equals("*6*2#")) /*device is not online */ ||  (fromServer.equals("*6*0#"))) /*for some reason device is not reachable */{ 
       motor1CommandString = "No Connection to device"; 
       state = 3; 
      } 
      break; 
     case 2: 
      if (fromServer.equals(ACK)) //device has received the message and replied back 
       state = 3; 
     break; 
    } 
    if (state == 3) { 
     break; 
} 

}

答えて

2

コールsetSoTimeoutにいくつかのコメントを見つけることができます。その後、readLineは、タイムアウト時間が経過する前にデータが読み取られない場合、SocketTimeoutExceptionをスローします。ループの外側でその例外を捕捉することができます。

+0

タイムアウトが切れる前にデータが読み込まれないと、readline()はすべてSocketTimeoutExceptionをスローしますか? –

+0

はい、正しいです。 –

+0

ありがとうございます。 Javaでこの例外がないとします。あなたは仕事をする別の方法を知っていますか? –

関連する問題