2011-07-26 4 views
0

私は以下の2つの関数を使ってサーバから文字列をダウンロードしています。私はまた、クライアントから見ても、サーバから見ても、テキストをダウンロードするのにかかる時間を記録しています。ダウンロードした文字列は決して同じではありません。文字列をダウンロードするときのタイムアウト

サーバの時間はほんの数ミリ秒ですが、クライアントが見た時間は無線信号に応じて平均100ミリ秒です。サーバー時間が許容範囲内にあるにもかかわらず、クライアントの時間が3000ミリ秒(ただし3200ミリ秒を超えることはありません)まで上昇することがあります。

タイムアウトが定義されていると思っていますが、どこにあるのかわかりません。それは私のコードではなく、私は開発者サイトとgoogleの結果を見て回りました。

私は、この遅延が定義される可能性のある手がかりを与えて、デフォルトでは3000ミリ秒であることを確認できると期待しています。ところで

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;  
} 

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;   
} 

:私はGoogleの検索結果の1から2つの機能を借りました。

EDIT:スレッド内から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の呼び出しであり、それは私にとっても本当の頭の中の困惑者でした。これは、ブラウザがタイムアウトする接続のために待たなければならなかったサーバはhttp接続だから、

を閉じるコンテンツの長さや

  • を指定するいずれか

    1. せずにデータを返していました私の場合で判明しましたデータを処理して受信イベントを生成する前に実行されます。あなたのケースでも同様のことが起きている可能性がありますので、ネットワーク解析ソフトウェアを起動して、httpの正確性を確認してください。私は通常、このタイプの作業にFiddler2を使用しますが、あなたがアンドロイドデバイスをプロキシ経由で非常にうまく使用できるかどうかはわかりません。 Webサーバーを制御しているように聞こえるので、終わりからtcpパケットを調べることは可能でしょう。

  • 関連する問題