41

私のアプリは、http://127.0.0.1/...(ローカルホストURL)を介して、作業中の同じデバイスに接続する必要があります。

何らかの理由で、JSONコンテンツを含むWebサイトにアクセスしたときの約50%(おそらく正確に50%)で、例外が発生します。

java.net.SocketException:recvfromが失敗しました:ECONNRESET(ピアによって接続がリセットされました)

他の50%については、完全に良い結果が得られます。私はポーリング(およびポーリング間の大きな遅延)を実行しようとしましたが、同じ奇妙な結果が得られ続けています。

私はインターネットとここを検索しましたが、なぜそれが発生するのかわかりません。ピアは、クライアントがそれを引き起こしたことを意味しますか?なぜそれが起こるのですか、そして私はそれをどのように扱うべきですか?

よくあることだと言うウェブサイトもありますが、そのような場合に何が一番いいのかわかりませんでした。

4

6 に答える 6

22

わかりました、答えはそれがサーバーのせいだということでした-各リクエストの後に接続を閉じる必要がありました。

Android が接続のプールを保持しており、古い接続を使用している可能性があります。

とにかく、今では動作します。


編集: の API によるとHttpURLConnection、これはクライアント側でも解決できます。

このクラスによって返される入力ストリームと出力ストリームはバッファリングされません。ほとんどの呼び出し元は、返されたストリームを BufferedInputStream または BufferedOutputStream でラップする必要があります。一括読み取りまたは一括書き込みのみを行う呼び出し元は、バッファリングを省略できます。サーバーとの間で大量のデータを転送する場合は、ストリームを使用して一度にメモリに格納できるデータ量を制限します。本文全体を一度にメモリに格納する必要がない限り、(本文全体を 1 バイト配列または文字列として格納するのではなく) ストリームとして処理します。

待ち時間を短縮するために、このクラスは、複数の要求/応答のペアに対して同じ基になる Socket を再利用する場合があります。その結果、HTTP 接続が必要以上に長く開いたままになる場合があります。disconnect() を呼び出すと、接続されたソケットのプールにソケットが返される場合があります。この動作は、HTTP 要求を発行する前に http.keepAlive システム プロパティを false に設定することで無効にできます。http.maxConnections プロパティを使用して、各サーバーへのアイドル接続をいくつ保持するかを制御できます。

出典: developer.android.com/reference/java/net/HttpURLConnection.html

于 2012-06-27T13:30:35.247 に答える
7

接続する前に、 HttpURLConnectionにこのプロパティを設定してみてください。

conn.setRequestProperty("connection", "close");

これにより、デフォルトでオンになっている「 keep-alive」プロパティが無効になります。

于 2015-11-26T15:06:56.567 に答える
3

これは私が知っている古いスレッドです。しかし、これは誰かを助けるかもしれません。

私の場合、このエラーは .NET WCF (soap) サービスが原因でした。返された結果のオブジェクトの 1 つに、get{} プロパティはあるが set{} プロパティがない DataMember がありました。

シリアル化を行うには、すべての DataMember で get{} と set{} の両方を使用できるようにする必要があります。空のセットを実装し(ビジネス ルールにより空になっています)、問題は解決しました。{}

私のシナリオは特定の悪いサーバーの実装ですが、トラブルシューティングの時間を節約するのに役立つかもしれません。

于 2015-02-13T13:57:57.727 に答える
1

Connection reset by peer特定の Web ページにアクセスしたり、(アプリや Android ブラウザーから) ファイルをダウンロードしたりするときに、これらのエラーが大量に発生していました。

接続をブロックしたのは私の 3G キャリアであることが判明しました (たとえば、.exeファイルのダウンロードは禁止されていました)。

Wifi でも同じ問題がありますか?

于 2012-06-26T13:03:30.417 に答える