gpt4 book ai didi

c# - GetHostAddresses 不同的错误代码

转载 作者:可可西里 更新时间:2023-11-01 09:30:41 24 4
gpt4 key购买 nike

我写了一个小测试程序,它使用 Dns.GetHostAddresses 来解析主机名。如果我输入一个不存在的主机名,它会抛出一个 SocketException 并且消息将是 No such host is known
我喜欢这个,因为错误消息足够小,可以直接放入我的 UI 中。

现在我确实将代码复制并粘贴到一个更大的项目中,但这次当我输入与我在测试项目中完全相同的主机名时,它会抛出一个 SocketException 但消息已设置to 请求的名称有效,但未找到请求类型的数据

两个堆栈跟踪在每个程序中都是相同的,但第一个错误是 WSAHOST_NOT_FOUND,第二个错误是 WSANO_DATA

我可以只输出我自己的错误信息,但我想知道为什么每次都抛出不同的错误?代码没有差异。

此外,似乎无论我运行每个程序多少次,它们都始终输出相同的错误消息。它不是交替的或任何东西。

============================================ ===============================

好吧,我知道是什么导致了这个问题。
我添加了 Pcap.Net 作为引用,并将其包含在我的项目中 using PcapDotNet.Core;
无论如何,在我注释掉之后,Dns.GetHostAddresses 抛出了正确的异常。

如果有人能告诉我为什么它会这样,以及如何解决它,那就太好了。

最佳答案

GetHostAddresses 中出现 SocketException 的原因有很多。在 WSA_NODATA 的情况下,这意味着 DNS 中有一个条目;但没有 IP 地址(即没有 A 记录)。如果您无法访问 DNS 服务器但数据已缓存,您可能会遇到不同的错误。或者,如果无法访问 DNS 服务器并且未缓存数据,您可能会收到不同的错误。等等。不幸的是,GetHostAddresses 将所有这些错误包装在一种异常类型中。如果您想对每种类型的错误执行不同的操作,则必须检查 SocketException 中的相关属性。如果您只是想检测“它不起作用”,那么您不必检查。但是,很明显 SocketException 消息会因失败而有所不同,因此我不建议只使用 Message。更不用说,它会在其他语言版本的 Windows 上得到翻译——因此,如果您的应用程序的其余部分是英语,则可能看起来很奇怪,除了这条消息。

从技术上讲,它可能有以下错误之一:WSANOTINITIALIZEDWSAENETDOWNWSAHOST_NOT_FOUNDWSATRY_AGAINWSANO_RECOVERYWSANO_DATAWSAEINPROGRESSWSAEFAULTWSAEINTR。尽管有些可能性极小。

我还认为您会收到不同的消息,具体取决于使用的是 IPv6 还是 IPv4。

关于c# - GetHostAddresses 不同的错误代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11781181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com