Http请求超时的一种处理方法[通俗易懂]

Http请求超时的一种处理方法[通俗易懂]URLConnection类常见的超时处理就是调用其setConnectTimeout和setReadTimeout方法:setConnectTimeout:设置连接主机超时(单位:毫秒)setRea

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

URLConnection类常见的超时处理就是调用其setConnectTimeout和setReadTimeout方法:

  1. setConnectTimeout:设置连接主机超时(单位:毫秒)  
  2. setReadTimeout:设置从主机读取数据超时(单位:毫秒)

还有一种比较另类的就是利用java Object对象的wait()和notify()、notifyAll()方法,利用线程的等待和通知机制处理urlConnection的超时,下面直接贴代码:

public class HttpConnProcessThread implements Runnable { public boolean isStop = false; public boolean readOK = false; private HttpURLConnection reqConnection = null; public Thread readingThread; private int readLen; private String msg = null; private String reqMethod; private byte[] data; /** * ReadThread constructor comment. */ public HttpConnProcessThread(HttpURLConnection reqConnection, String msg, String reqMethod ) { super(); this.reqConnection = reqConnection; this.msg = msg; this.reqMethod = reqMethod; } public void run() { InputStream input = null; OutputStream output = null; try{ //reqConnection.connect(); output = reqConnection.getOutputStream(); if ("post".equalsIgnoreCase(reqMethod) && msg != null && msg.length() >0) { output.write(msg.getBytes()); output.close(); output = null; } // 处理HTTP响应的返回状态信息 int responseCode = reqConnection.getResponseCode();// 响应的代码if( responseCode != 200 ) System.out.println("connect failed! responseCode = " + responseCode + " msg=" + reqConnection.getResponseMessage()); input = reqConnection.getInputStream(); int len; byte[] buf = new byte[2048]; readLen = 0; ByteArrayOutputStream outStream = new ByteArrayOutputStream();        // 读取inputStream while (!isStop) { len = input.read(buf); if (len <= 0) { this.readOK = true; input.close(); data=outStream.toByteArray(); break; } outStream.write(buf, 0, len); readLen += len; } } catch( IOException ie) {} catch(Exception e) {} finally { try{ reqConnection.disconnect(); if( input != null ) input.close(); if( output != null ) output.close(); //唤醒线程,跳出等待  wakeUp(); }catch(Exception e) { } } } public String getMessage(){ if (!readOK) //超时  { return ""; } if (readLen <= 0) { return ""; } return new String(data, 0, readLen); } public void startUp() { this.readingThread = new Thread(this); readingThread.start(); } //唤醒线程,不再等待 private synchronized void wakeUp() { notifyAll(); } public synchronized void waitForData(int timeout) { try { //指定超时时间,等待connection响应  wait(timeout); } catch (Exception e) { } if (!readOK) { isStop = true; try{ //中断线程 if( readingThread.isAlive() ) readingThread.interrupt(); }catch(Exception e) { } } } public static main(String[] args){ String msg=""; URL reqUrl = new URL("http://127.0.0.1:8080/"); // 建立URLConnection连接 reqConnection = (HttpURLConnection) reqUrl.openConnection(); HttpConnProcessThread rec = new HttpConnProcessThread(reqConnection, msg, "post" ); rec.startUp();
   // 如果顺利连接到并读完数据,则跳出等待,否则等待超时 rec.waitForData(
2000); String retMessage = rec.getMessage(); } }

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167426.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 到底什么是爱_pipeline模式

    到底什么是爱_pipeline模式在各个领域,有一个词眼出现得越来越频繁,即Pipeline。开始接触的时候,百思不得其解,要么觉得作者在用个洋名字在装高大上,其实,鲁迅先生说过一句话,太阳底下没有新鲜事一切的一切,都是纸老虎,Pipeline,你土味一点你把它翻译成一条龙服务专业一点,叫它综合解决方案,就行。算法或者大数据分析里的可重复使用,针对新的数据,直接输入数据,…

    2022年10月22日
  • java swing 多层_java swing布局嵌套[通俗易懂]

    java swing 多层_java swing布局嵌套[通俗易懂]小菜一枚,刚接触Java,想写个注册界面,但却遇到一个奇怪问题:代码如下:publicvoidframe(){this.frame=newJFrame(“用户注册”);//窗体基本属性this.frame.setSize(600,400);this.frame.setLocationRelativeTo(null);this.frame.setVisible(true);this.fr…

    2022年10月31日
  • 从零和使用mxnet实现softmax分类

    1.softmax从零实现(1797,64)(1797,)(1797,10)epoch:50,loss:[1.9941667],accuracy:0.3550361713967724

    2021年12月30日
  • 常用lunix命令面试题_五个常见的linux命令

    常用lunix命令面试题_五个常见的linux命令常用Lunix命令

  • 职称计算机模块intern,职称计算机考试模块试题.pdf

    职称计算机模块intern,职称计算机考试模块试题.pdf职称计算机考试模块试题职称计算机考试WORD模块试题2008-02-0819:12职称计算机考试,找点题目看看,也不知道是不是就考这些,顺便给大家分享分享.1、新建一word文档,将Windows剪贴板上的内容粘贴到该Word文档中。2、保存当前文档的版本(不输入版本的备注),并设置关闭文档时自动保存版本。3、请用文档结构图显示当前文档,并设置为蓝底白字。4、请将WORD…

  • idea配置tomcat服务器运行项目_idea添加tomcat服务器

    idea配置tomcat服务器运行项目_idea添加tomcat服务器需求背景      从Eclipse转IDEA后面对的第一个问题,就是要为IDEA配置tomcat服务,否则不可用。那么,功能需求      那么,该如何配置呢?1、点击“EditConfigurations”进入tomcat服务编辑页面。如下图所示:2、点击…

    2022年10月18日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号