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解析这块可能要自己手撸了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值