开发者社区> 问答> 正文

java socket connect超时设置无效!:配置报错 

查看了jdk的api后,Socket的connect(SocketAddress endpoint, int timeout)第二个参数是可以设置超时时间的,在时间没有到之前,连接请求会一直阻塞。
我代码如下: try { String path = "/"; String host = "127.0.0.1"; int port = 8079; Socket socket = new Socket(); InetSocketAddress address=new InetSocketAddress(host, port); socket.connect(address,30000); System.out.println("连接成功"); ...........
} catch (Exception e) { System.out.println(e.getMessage()); } }

我没有开启服务器,直接启动的客户端,我是预计在30秒超时后跳到异常,但现实是,连接设置的超时无效,直接跳到了异常 Connection refused: connect 请教这是什么问题?莫非api里面写的阻塞超时设定就是坑我?根本不是阻塞的?不支持超时设置? 我目前用下面的手动循环连接来做连接超时的:
int i=0; while(!socket.isConnected()){ try{ socket.connect(address,3000); }catch (Exception e) { System.out.println("超时失败:"+i+"次"); i++; if(i>30){break;} Thread.sleep(1000); } }

展开
收起
kun坤 2020-06-02 17:39:30 846 0
1 条回答
写回答
取消 提交回答
  • 怎么会坑你呢?
    你理解错了,超时异常抛出SocketTimeoutException,
    你catch的是啥?你catch了 Exception (这样写好么?
    你说你都没开服务端,那意味着远程套接字不可用,客户端的套接字已经确定连接没戏了,此时应该抛出的是IOException,还等条毛的超时? ######嗯,知道了,我刚才试了连www.youtube.com:80,的确可以触发超时,我之前那个异常是socket已经判定失败了,就没有阻塞直接就返回异常了

    2020-06-02 17:39:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载