2012-07-11 134 views
3

我有以下問題,我的應用程序中有一個簡單的TCP類,用於向設備發送消息以進行查詢,然後設備響應該消息,但沒有任何描述的行尾字符,因爲它是來自串行轉換器,最初試圖使用readline函數並發現它需要在輸出前需要eol字符我已經嘗試了掃描儀功能工作正常,除非設備因爲某種原因未響應該請求,我的應用程序然後凍結,是有可能在掃描儀功能上設置一個超時時間,這樣它就會丟棄連接並繼續前進,或者有更好的方法來完成這個任務嗎?我的代碼如下:java util掃描儀超時?

public String Send_TCP (InetAddress IPAddress, int POrt, String InData) throws IOException 
     {  

     Socket socket = null; 
     PrintWriter out = null; 
     BufferedReader in = null; 

     try { 
      socket = new Socket(IPAddress, POrt); 
      out = new PrintWriter(socket.getOutputStream(), true); 
      in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     } catch (UnknownHostException e) { 
      System.err.println("Don't know about host"); 
      System.exit(1); 
     } catch (IOException e) { 
      System.err.println("Couldn't get I/O for the connection"); 
      System.exit(1); 
     } 

     BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); 
     ; 

     System.out.print("Connected, Sending:"+ InData); 

     out.println(InData); 
     System.out.println("Equals"); 
     String str1 = new Scanner(in).useDelimiter(">").next() + ">"; 
     System.out.println(str1); 
     System.out.println("Equals"); 
     out.close(); 
     in.close(); 
     read.close(); 
     socket.close(); 
     return str1; 
    } 
} 

回答

-1

我相信以下達到什麼,我需要它,基本上檢查,如果緩衝區存在,如果它不那麼它會等待並再次檢查避免了掃描儀功能的陷阱,如果如果它從未收到郵件它讀取它。

try { 
    BufferedReader rd = new BufferedReader(new InputStreamReader(sock.getInputStream())); 
    int count = 1; 

     do { 
      if (rd.ready()){ 
       System.out.println ("Response Ready"); 
       str = new Scanner(rd).useDelimiter(">").next()+">"; 
       count = 501; 
      } 
      Thread.sleep(10); 
      System.out.println ("Response Not Ready" + count); 
      count ++; 
     } while (count < 25); 
2

我不知道我理解正確,你的問題,但你可以設置在插座上超時:socket.setSoTimeout(int timeout)。 見:javadoc

+0

謝謝,我已經嘗試過,但不幸的是它不工作,問題是,如果掃描程序爲空,則程序將等待,防止套接字在空閒超時時關閉。基本上我需要的是,如果掃描器發現緩衝讀寫器爲空,然後在停止和關閉連接之前繼續檢查指定的超時時間。 – James 2012-07-12 17:03:40