2

我尝试连接到一个 IP 地址(例如http://222.222.222.222:8080)和一个 URL(例如http://www.website.com),而我的 wifi 被禁用。我注意到,如果我没有 wifi 并且我尝试连接到 IP 地址,它会给我一个ConnectException错误。另一方面,如果我没有 wifi 并且我尝试连接到 URL,它会给我一个IOException错误。Exception当唯一的区别是我为第一种情况提供了 IP 地址而为另一种情况提供了 URL 时,为什么我收到的两种情况不同?有人可以启发我吗?我要求对此进行澄清。

谢谢!

4

1 回答 1

2

由于不同的步骤失败,您会收到不同的错误。

当您尝试连接到80IP 地址的端口时,这是一个connect(2)失败的系统调用。connect(2)失败的原因有很多;您需要检查来自异常的消息,以便向用户提供良好的错误消息。

当您尝试连接到80文本地址的端口时,库将首先尝试将主机名解析为使用getaddrinfo(3). 名称解析可能会失败,也可能不会失败——例如,如果您尝试连接到localhost,则通常不需要网络访问,因为名称服务查找可以完全在本地设备上处理。因为名称服务失败是因为您无法联系名称服务器,所以给出不同的错误消息(和异常)是有意义的,即使根本原因对于给定的一组测试是相同的。由于各种原因,您可能无法联系名称服务器。同样,您需要检查来自异常的消息,以便向用户提供良好的错误消息。

于 2012-04-01T00:52:29.967 回答