web-dev-qa-db-ja.com

「Android=

私のアプリは、http://127.0.0.1/...(localhost URL)を介して、動作している同じデバイスにアクセスする必要があります。

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

Java.net.SocketException:recvfrom failed:ECONNRESET(ピアによる接続のリセット)

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

私はインターネットとここも検索しましたが、なぜそれが起こるのかわかりません。ピアは、クライアントがそれを引き起こしたことを意味しますか?なぜそれが起こりますか、それをどのように処理する必要がありますか?

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

39

OK、答えはサーバーの障害だということでした-各リクエストの後に接続を閉じなければなりませんでした。

Androidは接続のプールを保持し、古い接続などを使用します。

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


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

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

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

から取得: developer.Android.com/reference/Java/net/HttpURLConnection.html

21

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

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

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

6
valerybodak

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

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

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

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

3
Cucumen

私はこれらをたくさん持っていたConnection reset by peer特定のWebページにアクセスしているとき、またはファイルをダウンロードしているとき(アプリまたはAndroidブラウザ)から)。

接続をブロックしたのは私の3Gキャリアでした(たとえば、.exeファイルは禁止されていました)。

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

1
Sébastien

私の状況では、オペレーターが作成したAPNからプロキシアドレスとポートを削除することで問題が解決しました。私がテストしたように、ドメイン名の代わりにリモートサーバーのIPアドレスを使用しても問題を解決できます。

0
ahmad pj