栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Kotlin学习笔记(java.io.IOException: unexpected end of stream on Connection)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Kotlin学习笔记(java.io.IOException: unexpected end of stream on Connection)

这几天一直在用kotlin写app,今天遇到一个OKHttp的异常报错,log中一直打印java.io.IOException: unexpected end of stream on Connection。但是这个web api我用浏览器是OK的,抓了服务器的cap包,发现也是正常的。从网上查找,貌似很多人遇到这类问题,基本方案都是在http header里面添加“connection”为“close”的包头。这样的话,服务器会主动关闭连接,但是这样的话,每次都要重新连接服务器。

重新对比看了一下cap包,发现服务器发送的数据是这样的:

第一个数据包:
HTTP/1.1 200 OK

Content-type:text/plain

Content-length:96

Accept:*/*

第二个数据包:
hello world,this is a new api

一个http包分开成2个数据包发送过来了。还好,服务器代码(https://github.com/wangsun1983/Obotcha)全是我自己写的,直接修改了服务器代码,做了一个缓存发送,尽量保证http包能用一个数据包发送。再次用okhttp连接接受数据,一切OK了!!!但是如果遇到网络异常,数据重发,其实还是能出现unexpected end of stream on Connection的,治标不治本。

从上面的试验可以判断,应该是OKHttp对于数据包的解析有问题,它没有全面考虑到各种粘包或者多个数据包分发的情况。所以怀疑如果用逐个字节发送可能会测出很多异常问题,哎,这样的开源库真心害怕用,有空还得看一下okhttp的源码,http解析这块可能要自己手撸了。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866396.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号