2

基本的にウェブページに接続し、投稿データを一緒に送信し、受信した応答を返すこの静的関数があります(JSONオブジェクト)

私が抱えている問題は、どのタイムアウトを設定しても、1秒しか試行していないときにタイムアウトが発生することがよくあり、タイムアウトは6秒であるはずがないということです。

public static String makeRequest(String path, String info) throws Exception 
{
  HttpParams httpParameters = new BasicHttpParams();
  int timeoutConnection = 6000;
  HttpConnectionParams.setConnectionTimeout(httpParameters, timeoutConnection);
  int timeoutSocket = 6000;
  HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);

  DefaultHttpClient httpclient = new DefaultHttpClient(httpParameters);
  HttpPost httpost = new HttpPost(path);
  StringEntity jsonobj = new StringEntity(info);
  httpost.setEntity(jsonobj);
  httpost.setHeader("Accept", "application/json");
  httpost.setHeader("Content-type", "application/json");
  ResponseHandler responseHandler = new BasicResponseHandler();

  String response = httpclient.execute(httpost, responseHandler);
  return response;

今、私はこのようないくつかの問題を見てきましたが、私を助けることができる答えを見つけることができませんでした。スレッドセーフではないためだと言う人もいますが、私は同時に複数の呼び出しを行うのではなく、すべて順番に実行されます。問題は最初の試行で発生しますが、異なるスレッドからは言うまでもなく、まだ複数の接続/ httppostがないため、この理由で発生しないはずです。

ただし、最近は頻繁に発生し、数日間またはほとんど発生しなかった場合もあります。

AndroidHttpClientを調べてみましたが、HttpPostをサポートしていないようです。そのため、これも役に立ちません(または、これが間違っていますか?)

パスと情報の両方のデータが正しいので、テストしました。また、私のサーバーには問題がありません。

それはあなたのネットワークである可能性があると言う人もいますが、私は今日テストされた3つのwifiネットワークでそれを持っています。ひどく、私のモバイルプロバイダーのインターネット接続では、それは発生しないか、ほとんど発生しません。

ISPがヘッダー情報を変更したことが原因である可能性があるという回答を1つ読みました。ユーザーエージェントに異なる値を使用しようとしましたが、それも機能しませんでした。

私は誰かが助けてくれることを願っています、そしてそれのために私はこれが起こり続けることを本当に私を苛立たせているので私は感謝するでしょう。

4

1 に答える 1

2

TCPがタイムアウト期間の前に接続拒否(つまり着信RST)を検出した場合、それは失敗です。この場合、タイムアウトを待つ意味はありません。再試行は同じ方法でのみ再失敗することが予想されます。タイムアウトは、応答がない場合のタイムアウトです。

于 2012-05-13T01:48:28.063 に答える