ssl socket 为什么频繁意外断开
我建了一个基于SSLsocket通信的客户端和服务端,socket连接后没设置close。
private InputStream in;
private byte[] mDateBuf = new byte[1024];
while ((in.read(mDateBuf)) != -1) {
log.e(TAG,"socketData: " +mDateBuf );
}
log.e(TAG, “socket err”);
客户端,服务端都是这种while循环read数据,我是通过循环退出,判断socket断开的.
客户端每隔5秒会发一个心跳包,服务端会回应,可是这种长连接在我网络环境下十几分钟就会退出循环,原因是socket意外断开了,read返回值为-1,退出了循环。
我想问下,这种socket频繁断开现象正常吗?有没有解决方法?
------解决方案--------------------网络中断是不可预知的,早期的socket做法是定时发送心跳包,如果在预设时间间隔内收到回应包,则认为连接正常。如果没响应,则判断为已经断开。当然,如果你用的socket组件提供检测网络连接状态的功能,那就最好了