分析http请求数据常见异常 | 您所在的位置:网站首页 › 服务器返回的数据异常 › 分析http请求数据常见异常 |
1.ConnectException连接超时
访问该地址超时,无法连接该服务器。 这种情况直接抓取该异常提醒即可。 2.SocketTimeoutException读取数据超时注:可以用过URL类.getxxx方法获取url的主机名端口号等等(new URL(url)) 能连接服务器,但是与服务器交互时间超过请求最大连接时长。 这种情况需要对目标主机进行ping操作确定网络速度。(kB/s) ping ip -l 1000 -n 4 -w 60000 其中-l 1000 代表字节数默认为32,-n 4代表目标主机返回请求数量,-w 60000代表最大连接时间 使用Process类和Runtime.getRuntime().exec(命令字符串)模拟ping操作。 使用Process.inputstream()获取进程输入信息。 使用inputstreamReader(字节流,编码类型)将字节根据编码类型读取成字符。 使用BufferReader包装inputstreamReader可以提高效率。 Process proc = Runtime.getRuntime().exec("ping "+new URL(url).getHost()+" -l 10000 -n 4 -w 60000"); BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream(), Charset.forName("GBK"))); //命令行中的字符为gbk,所以要根据gbk类型来读取。解决打印在idea乱码问题 while (br.readLine()!=null){ System.out.println(br.readLine()); } 3.计算请求耗时和下载资源平均网速请求耗时:请求前后获取系统时间相减即可。 System.currentTimeMillis获取系统时间(long) 平均网速:获取资源字符长度除于请求时间,获取大概网速。或者直接模拟ping也行。 获取资源字符长度:读取到的字符.getBytes().length(字节) 1字节 = 8bit比特 1kB/s = 8 kb/s 所以直接ping一定字节获取到时间,直接除于就获得了网速。 这样子最起码知道是大于32kB/s的(时间的1000就化作k了,代表千字节每秒) 4.后续问题 4.1bufferReader的readline函数读到空行时会停止读取,这样ping命令后面的统计信息就读取不到解决方法请看这篇文章: BufferedReader踩坑 |
CopyRight 2018-2019 实验室设备网 版权所有 |