我尝试在禁用wiFi时连接到IP地址(例如http://222.222.222.222:8080)和URL(例如http://www.website.com)。我注意到,如果我没有Wi-Fi并尝试连接到IP地址,则会出现ConnectException
错误。另一方面,如果我没有wiFi并尝试连接到URL,则会出现IOException
错误。为什么我在2个案例中收到不同的Exception
,唯一的区别是我提供了第一个IP地址和另一个的URL?有人可以在这个上启发我吗?我要求澄清。
谢谢!
答案 0 :(得分:2)
由于不同的步骤失败,您会遇到不同的错误。
当您尝试连接到IP地址的端口80
时,它是一个失败的connect(2)
系统调用。 connect(2)
失败的原因有很多种;您需要检查来自异常的消息,以便向用户提供良好的错误消息。
当您尝试连接到文本地址的端口80
时,这些库将首先使用getaddrinfo(3)
尝试将主机名解析为IP地址。基于具有网络访问权限,名称解析可能会失败也可能不会失败 - 例如,如果您尝试连接到localhost
,通常不需要网络访问,因为名称服务查找可以完全在本地设备上处理。由于名称服务失败是因为您无法联系名称服务器,因此即使基础原因对于给定的一组测试是相同的,也应该给出不同的错误消息(和异常)。您可能由于各种原因无法联系域名服务器。同样,您需要检查来自异常的消息,以便向用户提供良好的错误消息。