2016-09-28 29 views
-1

這是正確的嗎?或者我在這裏做錯了什麼?soTimeout從你打電話的那一刻開始打嗝?

設置超時的話,從插座

public String receive(){ 
     inStream = telnetCreator.getInputStream(client); 
     int buff; 
     String MessageReceived =""; 
     try{ 
       if (inStream.available() > 0){ 
        buff = inStream.read(); 
        MessageReceived += (char) buff; 
        System.out.println(MessageReceived); 
       } 
     }catch (Exception e){ 
      System.out.println("MessageReceived :- "+ MessageReceived); 
      return MessageReceived; 
     } 
     return MessageReceived; 
    } 

因爲我設置超時時間爲1000毫秒,然後睡了2000毫秒閱讀

client.setSoTimeout(1000); // timeout after READ_SlEEP if the socket is idle 

Thread.sleep(2000); 

,插座拋出一個異常因爲讀取的定時器已經超時。 這很刺激。那麼現在我必須在使用接收之前設置超時,然後在每次接收後清除超時?

回答

0

soTimeout從你打電話的那一刻開始滴答滴答?

不,它從您執行讀取的那一刻開始計時。

因爲我設置超時時間爲1000毫秒,然後睡了2000毫秒

爲什麼?字面上完全浪費時間。

套接字引發異常,因爲讀取的定時器已經超時。

不,它會拋出異常,因爲在您呼叫read()的那一刻超時一秒內沒有收到數據。

這很刺激。

這是非常愚蠢的代碼。取消睡眠並延長超時時間以符合實際。一秒鐘是一個量級太小讀timeoutl

所以現在我必須設置超時之前,我用收到

,然後清除每次接收後超時?

+0

1.我不想等待1秒以上號。 – badbuddha

+0

我正嘗試連接到遠程登錄服務器。我想發送一條消息,然後等待1秒鐘作出迴應。所以服務器的請求響應之王。我必須多次這樣做。但是如果我在兩次請求 - 響應之間有睡眠,那麼它表示讀取超時 – badbuddha