http连接之HttpURLConnection
来源:互联网 发布:linux file命令 源码 编辑:程序博客网 时间:2024/05/07 11:40
1. 创建HttpURLConnection对象
2. 设置选项参数
3. 获取输出流(如果没有单独调用conn.connect(), 则获取输出流时会调用)
4. 输出流的获取写入必须在输入流之前
5. 设置参数必须在connect之前,否则无效
6. 在我的测试环境下,这里的connecttimeout并没有生效,从connect()方法看,timeout后会拋出异常,如果没有设
置timeout, 则connect一直到连接上为止。
7. 这里的conn.getOutputStream()会进行connect,耗时长达20多秒。开始排查问题。
问题排查:
1. 选项参数是否有漏设置的
2. 通过抓包分析。linux下 tcpdump -w google.cap ; 在windows下通过wireshark分析google.cap
3. 因为是http连接,所以在wireshark分析是,我只筛选了hhtp包进行分析,发现请求包与回复包用时0.05秒
4. 实际上只筛选http是不对的,因为问题出在了连接上,http包是在连接之后的事情了
5. 修改筛选条件为:ip.addr == 122.114.58.130 and tcp.port == 45428
6. 这样就看到了一次完整的http建立连接的三次握手,连接建立后的http包的发送与回复,关闭连接。
7.从连接到发送包的回复,用时0.12秒,而关闭连接耗时10秒作用
8. 关闭并不会影响到连接的时间。所以连接的耗时并不久。这样估计耗时在域名解析上了。
9. 在/etc/hosts文件中添加域名后,连接一切就OK了,不再出现客户端多次点击进入游戏才进入的情况了。
10.虽然长时间才能连接上,但是仍然会返回校验成功,只是服务器有个超时判定,超时后,则不会返回校验成功的数
据,也就登陆不了了。
11./etc/hosts配置IP与域名的关系,类似windows下的hosts文件。/etc/host.conf配置域名解析的顺序。/etc/resol
v.conf配置绑定的域名服务,也就是要在哪些域名服务器中查找需要的域名。 /etc//h、、osts 文件
12. nslookup 域名:解析域名
final URL url = new URL( urlstring);
final HttpURLConnection conn = (HttpURLConnection) url.openConnection();conn.setRequestMethod("POST");conn.setDoInput(true);conn.setDoOutput(true);conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");conn.setConnectTimeout(config.connecttimeout);conn.setReadTimeout(config.readtimeout);conn.setUseCaches(false);OutputStream os = conn.getOutputStream();PrintWriter printWriter = new PrintWriter(os);printWriter.write(param);printWriter.flush();printWriter.close();os.close();if (conn.getResponseCode() == 200) { int linenum = 0; final InputStream is = conn.getInputStream(); try { InputStreamReader in = new InputStreamReader(is, Config.UTF8); BufferedReader buffer = new BufferedReader(in, 4096); StringBuilder resultDataBuilder = new StringBuilder(); while (true) { final String line = buffer.readLine(); if (null == line) break; resultDataBuilder.append(line); linenum++; if (maxlinenum > 0 && linenum >= maxlinenum) break; } buffer.close(); in.close(); if (xdb.Trace.isDebugEnabled()) xdb.Trace.debug("HttpIO.getRequest resultDataBuilder = " + resultDataBuilder); return resultDataBuilder.toString(); } finally { is.close(); }}else { Logger.trace("conn.conn.getResponseCode() = " + conn.getResponseCode()); return "";}
0 0
- http连接之HttpURLConnection
- Http的连接方式之HttpUrlConnection
- Android笔记之(一)HTTP连接--HttpURLConnection方式
- Http编程之HttpURLConnection
- http请求之HttpURLConnection
- HttpURLConnection用法详解 HTTP连接
- Android开发之Http通信HttpURLConnection接口
- Http学习之使用HttpURLConnection…
- Android开发之Http通信HttpURLConnection接口
- Android开发之Http通信HttpURLConnection接口
- Android开发之Http通信HttpURLConnection接口
- Android之Http协议编程04-HttpURLConnection
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Java网络连接之HttpURLConnection与HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- Android网络连接之HttpURLConnection和HttpClient
- 红黑树(二)插入
- Vim插件之startify
- mysql 函数日期 两个日期相减 得到相差几天
- mybatis 根据子类获取父类的方法 base_type_detail是数据库里面的表
- qt多级目录开发
- http连接之HttpURLConnection
- 简单的FPGA实例
- android打包解包boot.img,system.img
- CentOS迷你版安装后--ifconfig不能使用的解决
- listView的常用使用事项注意点
- ADV-218 递推求值
- vue2使用animate css
- python学习记录 一
- ansible 自动化运维