IOException:接続ソリューションのストリームの予期しない終了

接続には、ストリームの予期しない終わり:プロジェクトで使用Retorfit + Rxjavaのネットワーク要求で、不合理なログインインターフェース要求を要求したが、サーバーがすべての要求のログを受信していない、ログを見て、この方法は、このエラーIOExceptionが報告された 。
私はオンライン行きます:この問題の原因は、一般的に二つのタイプを見てみましたが、私の第二の理由です見つける見つける
1、githubの上の問題の説明を見て最初:OkHttpがしようとするとエラーが発生 FIN_WAIT2にある接続を再利用しますサーバ内の状態、サーバーKEEP_ALIVEので、タイムアウトは、クライアントのタイムアウトよりも小さいです。 そして、私はコード内で間違って行くことができる場所を見つけ、私のokhttpのタイムアウト設定は100であり、サーバは、一般的に、これは今までに起こった60の一時的な修正です。
2は、IOException:ストリームの予期せぬ終了に理由の接続が生成され、okhttpバージョンと関係を持っている、あなたはインターセプタ(「接続」、「クローズ」でのaddHeaderを追加する必要があります )。
次のように言葉を選びました:

if(Build.VERSION.SDK !=null&&Build.VERSION.SDK_INT >13)

        {
            urlConnect.setRequestProperty("Connection", "close");
        }

        或者重新写一个拦截器如:class  NetInterceptor   implements  Interceptor

        {
            @Overridepublic Responseintercept(Chain chain)throws IOException {
            Request request = chain.request().newBuilder().addHeader("Connection", "close").build();
            returnchain.proceed(request);
        }
        }

        OkHttpClient client = newOkHttpClient.Builder().addNetworkInterceptor(new NetInterceptor()).build();
    }

各要求は、新しいTCPのリンクを作成した後、TCPリンク、増加のaddHeader(「接続」、「クローズ」)で、サーバとクライアントの要求が配られたときに掲載しますが、カットオフなぜそれがはっきりあるため、これが発生します。私は、このヘッダーの意味はどのくらい処理するためのときに、クライアントとサーバーの通信リンクで、要求とREPONSEヘッダが接続HTTP1.1のヘッダフィールドに現れる可能性がある、これについての説明を見つけるためにオンラインで行きました。HTTP1.1では、他の側に、クライアントとサーバーのサポート長いリンクは、もしクライアントの使用HTTP1.1契約デフォルトですが、長いリンクを使用したくない、あなたは、ヘッダー内の近い接続の値を指定する必要があります。また、サーバ側であればまた、私ははっきりと接続が近くにあります説明する必要が反応して、長いリンクをサポートする必要はありません。

ます。https://www.jianshu.com/p/649c13deee04で再現

おすすめ

転載: blog.csdn.net/weixin_33883178/article/details/91303882