java.io.IOException: unexpected end of stream on Connection异常解决

 <-- HTTP FAILED: java.io.IOException: unexpected end of stream on Connection{public-access.gacicv.com:443, proxy=DIRECT@ hostAddress=public-access.gacicv.com/139.199.92.218:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1}
05-23 10:16:51.955 W/System.err(  992): java.io.IOException: unexpected end of stream on Connection{public-access.gacicv.com:443, proxy=DIRECT@ hostAddress=public-access.gacicv.com/139.199.92.218:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1}
05-23 10:16:51.956 D/GCS_b   (  992): (BridgeInterceptor.java:84)load all of cookie ForRequest
05-23 10:16:51.956 W/System.err(  992):     at okhttp3.internal.http1.Http1Codec.readResponseHeaders(Http1Codec.java:208)
05-23 10:16:51.957 D/WifiStateMachine(  732): calculateWifiScore freq=5745 speed=156 score=60 highRSSI  -> txbadrate=0.00 txgoodrate=17.56 txretriesrate=0.00 rxrate=57.90 userTriggerdPenalty0
05-23 10:16:51.957 W/System.err(  992):     at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:88)
05-23 10:16:51.957 D/GCS_b   (  992): (b.java:0)cookie Name:IOV_ACCOUNT_SESSIONID : 82cb8693-dd7e-47de-b1f5-a35c1635063d path/
05-23 10:16:51.957 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-23 10:16:51.958 W/System.err(  992):     at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
05-23 10:16:51.958 D/GCS_b   (  992): (b.java:0)cookie Name:usersig : AAAAENMc0emtRSwU5jY6A1ZjgiQ5ZqV3USHxN/pF/slcHtzGcZ183Q+VYloriXNpDcxJ0MMpEfn8p4HmCc4HZRUalXdYAfR+g9binhDXIuN0uDzTn+PUBsjsCGBkXeSnpHF3Pn8B55t7l09OwMwLBZ4mAPJBDofYQy1aWQyWlslquYhT1NLvJYoUxgXOA6AHh9aB6rG1tfnaep6kbRtCHyi29AXzmD45bucMyYOGSIpvrhsQnLKSSkyS8cpXb1E770oZgQN7jPYdE9Vdw79O8u5MyYOlHMEpPq/U6qxOIbMovZVa path/
05-23 10:16:51.958 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-23 10:16:51.958 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
05-23 10:16:51.958 D/GCS_b   (  992): (b.java:0)cookie Name:userid : 144115205364735127 path/
05-23 10:16:51.959 W/System.err(  992):     at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:93)
05-23 10:16:51.959 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-23 10:16:51.960 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
05-23 10:16:51.960 D/WifiStateMachine(  732):  good link -> stuck count =0
05-23 10:16:51.960 W/System.err(  992):     at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
05-23 10:16:51.961 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-23 10:16:51.961 W/System.err(  992):     at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:126)
05-23 10:16:51.962 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-23 10:16:51.963 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
05-23 10:16:51.968 E/_AccountSDK_( 3387): [h](WeCarBaseSDK.java:498):startSDK
05-23 10:16:51.975 W/System.err(  992):     at okhttp3.logging.HttpLoggingInterceptor.intercept(HttpLoggingInterceptor.java:225)
05-23 10:16:51.976 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:147)
05-23 10:16:51.976 W/System.err(  992):     at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:121)
05-23 10:16:51.976 W/System.err(  992):     at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:254)
05-23 10:16:51.977 W/System.err(  992):     at okhttp3.RealCall$AsyncCall.execute(RealCall.java:200)
05-23 10:16:51.977 W/System.err(  992):     at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
05-23 10:16:51.978 W/System.err(  992):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
05-23 10:16:51.978 W/System.err(  992):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
05-23 10:16:51.978 W/System.err(  992):     at java.lang.Thread.run(Thread.java:818)

出现以上: unexpected end of stream on Connection{public-access.gacicv.com:443, proxy=DIRECT@ hostAddress=public-access.gacicv.com/139.199.92.218:443 cipherSuite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 protocol=http/1.1}。

原因:客户端和服务器通过TCP协议进行连接,第一次请求成功后,客户端复用了原来的连接,但服务器此时已经处在TCP连接中的FIN_WAIT2状态,因此连接不成功。

修复方案,直接上源码,改了绝对解决问题:

把retryOnConnectionFailure()设置成true,或者保持okhttpClient默认设置(即删除这个设置,默认是true)
为了提高Java大文件上传的速度,我们可以使用多线程上传。以下是实现多线程上传的步骤: 1.将大文件分割成多个小文件,每个小文件的大小可以根据实际情况进行设置。 2.使用多线程同时上传这些小文件,可以使用JavaCompletableFuture来实现。 3.在服务器端,将这些小文件合并成一个大文件。 下面是一个Java多线程上传大文件的示例代码: ```java import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; public class MultiThreadUpload { private static final int THREAD_NUM = 5; // 线程数 private static final int BUFFER_SIZE = 1024 * 1024; // 缓冲区大小 private static final String UPLOAD_URL = "http://example.com/upload"; // 上传地址 private static final String FILE_PATH = "/path/to/large/file"; // 大文件路径 public static void main(String[] args) throws IOException { File file = new File(FILE_PATH); long fileSize = file.length(); long blockSize = fileSize / THREAD_NUM + 1; // 每个线程上传的块大小 List<CompletableFuture<Void>> futures = new ArrayList<>(); for (int i = 0; i < THREAD_NUM; i++) { long start = i * blockSize; long end = Math.min(start + blockSize, fileSize); CompletableFuture<Void> future = CompletableFuture.runAsync(() -> { try { uploadBlock(file, start, end); } catch (IOException e) { e.printStackTrace(); } }); futures.add(future); } CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join(); System.out.println("Upload finished."); } private static void uploadBlock(File file, long start, long end) throws IOException { URL url = new URL(UPLOAD_URL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); conn.setRequestProperty("Content-Type", "application/octet-stream"); conn.setRequestProperty("Content-Range", "bytes " + start + "-" + (end - 1) + "/" + file.length()); try (InputStream in = new FileInputStream(file); OutputStream out = conn.getOutputStream()) { byte[] buffer = new byte[BUFFER_SIZE]; long pos = 0; while (pos < start) { long n = in.skip(start - pos); if (n <= 0) { throw new IOException("Unexpected EOF"); } pos += n; } while (pos < end) { int n = in.read(buffer, 0, (int) Math.min(buffer.length, end - pos)); if (n < 0) { throw new IOException("Unexpected EOF"); } out.write(buffer, 0, n); pos += n; } } if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { throw new IOException("Failed to upload block: " + conn.getResponseCode() + " " + conn.getResponseMessage()); } } } ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值