2011-07-26 58 views
0

我正在使用以下兩個函數從服務器下載字符串。我也記錄了下載文本所需的時間,無論是客戶端還是服務器都可以看到。下載的字符串從不相同。下載字符串時超時

服務器時間只有幾毫秒,但客戶端看到的時間平均爲100毫秒,具體取決於wifi信號。有時候,即使服務器時間仍在可接受的範圍內,客戶端時間也會上升到3000毫秒(但從不高於3200毫秒)。

我開始認爲超時是在某處定義的,但我不知道它在哪裏。這不在我的代碼中,我在開發者網站和谷歌環顧四周,沒有結果。

我希望有人可以給我一些線索,可以定義這種延遲,並確認它默認爲3000毫秒。

private String DownloadText(String URL) 
{ 
    String str = ""; 
    int BUFFER_SIZE = 2000; 
    InputStream in = null; 
    try{ 
     in = OpenHttpConnection(URL); 
    } catch (IOException e1) { 
     e1.printStackTrace(); 
     return ""; 
    } 
    catch(ArithmeticException ae){ 
     // 
    } 
    try{ 
     InputStreamReader isr = new InputStreamReader(in); 
     int charRead; 

      char[] inputBuffer = new char[BUFFER_SIZE];   
     try { 
      while ((charRead = isr.read(inputBuffer))>0) 
      {      
       //---convert the chars to a String--- 
       String readString = 
        String.copyValueOf(inputBuffer, 0, charRead);      
       str += readString; 
       inputBuffer = new char[BUFFER_SIZE]; 
      } 
      in.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return ""; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return str;   
} 

private InputStream OpenHttpConnection(String urlString) throws IOException { 
    InputStream in = null; 
    int response = -1; 

    URL url = new URL(urlString); 
    URLConnection conn = url.openConnection(); 

    if (!(conn instanceof HttpURLConnection)) throw new IOException("Not an HTTP connection"); 

    try{ 
     HttpURLConnection httpConn = (HttpURLConnection) conn; 
     httpConn.setAllowUserInteraction(false); 
     httpConn.setInstanceFollowRedirects(true); 
     httpConn.setRequestMethod("GET"); 
     httpConn.connect(); 

     response = httpConn.getResponseCode();     
     if (response == HttpURLConnection.HTTP_OK) { 
      in = httpConn.getInputStream();         
     } 
    } 
    catch (Exception ex) { 
     throw new IOException("Error connecting");    
    } 
    return in;  
} 

BTW:我從谷歌的搜索結果借了這兩種功能。

編輯:我從線程內調用DownloadText(url)。我開始認爲這可能與超時有關。可以 ?

回答

1

這將幫助你:

private static final int CONNECT_TIMEOUT_MILL = 10000; 
    private static final int READ_TIMEOUT_MILL = 3000; 
    .... 
    HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
    con.setConnectTimeout(CONNECT_TIMEOUT_MILL); 
    con.setReadTimeout(READ_TIMEOUT_MILL); 
    .... 
+0

這並不回答我的問題。我不想自己定義它,而是找出暫停的原因。 – skari

0

我以前見過類似的行爲是這樣的。在我的情況下,這是在AJAX調用,它也是我真正的頭腦困惑者。它在我的情況下,服務器被返回的數據,而無需任何

  1. 指定內容長度或
  2. 關閉HTTP連接

於是關了瀏覽器必須等待連接超時在處理數據並生成接收事件之前。您的情況可能會出現類似情況,因此請打開網絡分析軟件並驗證http正確性。我通常使用Fiddler2進行這類工作,但我不知道您是否可以使Android設備非常好地通過代理。這聽起來像你控制網絡服務器,所以也許可以從這個端點檢查tcp數據包。