Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.io.IOException:连接上出现意外的流结束?_Java_Android_Httpurlconnection_Okhttp - Fatal编程技术网

java.io.IOException:连接上出现意外的流结束?

java.io.IOException:连接上出现意外的流结束?,java,android,httpurlconnection,okhttp,Java,Android,Httpurlconnection,Okhttp,调用我们的一个内部web服务似乎会出现以下错误: java.io.IOException: unexpected end of stream on Connection{webservicessandbox.xxx.com:443, proxy=DIRECT@ hostAddress=174.143.185.13 cipherSuite=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA protocol=http/1.1} (recycle count=0) 从我在其他地方

调用我们的一个内部web服务似乎会出现以下错误:

java.io.IOException: unexpected end of stream on Connection{webservicessandbox.xxx.com:443, proxy=DIRECT@ hostAddress=174.143.185.13 cipherSuite=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA protocol=http/1.1} (recycle count=0)
从我在其他地方看到的情况来看,这是一个服务器问题,但在浏览器或IOS中调用WS时,我们没有看到这个问题。我使用了OkHTTP和手动HTTPUrlConnection实现,但似乎没有任何区别。有人有什么想法吗

OKHttp:
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .addHeader("Authorization", "Bearer " + apiToken)
                    .addHeader("content-type", "application/json")
                    .url(uri)
                    .build();
HTTPURLConnection:
            URL myURL = new URL(uri);
            HttpsURLConnection myConnection = (HttpsURLConnection) myURL.openConnection();
            myConnection.setConnectTimeout(TIMEOUT_MILLISEC);
            myConnection.setDoOutput(false);
            myConnection.setRequestMethod("GET");
            myConnection.setRequestProperty("Authorization", "Bearer " + apiToken);
            myConnection.setRequestProperty("content-type", "application/json");
            int respCode = myConnection.getResponseCode();

此错误
TLS\u ECDHE\u RSA\u和\u AES\u 256\u GCM\u SHA384
与服务器有关。可能的原因是服务器已关闭。

客户端和服务器都需要在连接完成后关闭连接

在OkHttp请求生成器中,添加以下行:
.header(“连接”、“关闭”)


同时检查浏览器检查器的“网络”选项卡,查看浏览器正在发送哪些标题。匹配代码中的这些标题,它应该会起作用。

请尝试以下可能的解决方案(在我看来):

1-尝试使用
retryOnConnectionFailure(true)
如下:

OkHttpClient client = new OkHttpClient.Builder()
    .retryOnConnectionFailure(true)
    .build();
2-尝试添加:
request.addHeader(“连接”、“关闭”)
(根据Kartik的回答,大多数情况下这是解决方案。)

3-请增加服务器的响应时间(将其设置为尽可能高),然后重试


另请参见:

您是否使用某种代理?远程服务器是否需要双向ssl(请求客户端证书)?据我所知,这可能是一个仅适用于我的Android仿真的问题。当我关闭仿真并转到物理设备上时,我似乎不再有发生此错误的问题。我仍然不明白为什么以前我可以很好地使用仿真器时,这会停止工作。在某个时刻,模拟器的更新可能会出现问题?感谢您的响应,但不,我能够使用其他设备一致地调用服务。这是设备规格9吗?这不是错误,这是TLS密码套件。
Request request = new Request.Builder()
                    .addHeader("Authorization", "Bearer " + apiToken)
                    .addHeader("content-type", "application/json")
                    .addHeader("Connection","close")
                    .url(uri)
                    .build();