加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 区分连接被拒绝和连接超时

发布时间:2020-12-15 00:41:38 所属栏目:Java 来源:网络整理
导读:使用 java.net.Socket.connect()时,拒绝连接和超时都会导致ConnectException. java.net.ConnectException: Connection timed out: connectjava.net.ConnectException: Connection refused: connect 我怎样才能安全地区分这两者?确保解析错误消息可以完成工
使用 java.net.Socket.connect()时,拒绝连接和超时都会导致ConnectException.
java.net.ConnectException: Connection timed out: connect

java.net.ConnectException: Connection refused: connect

我怎样才能安全地区分这两者?确保解析错误消息可以完成工作.但是当消息在未来的Java版本中发生变化时,我运气不好.

更大的图景:我正在使用带有Metro实现的JAX-WS编写Web服务客户端.当Web服务调用失败时,我想清楚地报告失败的原因,以便快速解决问题.

解决方法

不幸的是,在Sun JDK中,除了字符串之外,此信息不会在任何地方提供.请参阅 PlainSocketImpl.c的第473行(适用于* ix)和 net_util_md.c(适用于Windows). * ix实现有时会调用NET_ThrowByNameWithLastError(来自* ix net_util_md.c),它将在字符串中包含errno;这个功能存在于Windows上,但这里没有使用它..

因此,你必须依赖字符串并希望它们不会改变. Sun似乎没有将它们本地化,这是有道理的,因为它们不应该面向用户.您可以尝试解析errno以获得更稳定的错误代码.

如果没有字符串或errno匹配,你也应该确保有一个后备.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读