gpt4 book ai didi

c# - 在尝试 HttpClient 连接之前测试开放端口

转载 作者:行者123 更新时间:2023-11-30 16:18:43 28 4
gpt4 key购买 nike

HttpClient的各种方法类(GetAsync 等)采用 Uri 对象或字符串并尝试打开到指定位置的连接。然而,在我的情况下,远程主机很可能没有在监听(端口已关闭并将被主动拒绝;它在我们的局域网内)。

我宁愿不依赖捕获异常来处理这种情况,尤其是因为这些方法会抛出 AggregateException然后我必须对其进行筛选。

有没有更好的方法来检测这种情况,同时仍然获得 HttpClient 类的好处(远程主机是 WebApi 服务)?我是否应该使用 TcpClient 之类的东西事先检查端口是否正在监听?当然,这涉及调用之间的竞争条件。我希望采用 HttpMessageHandler 的构造函数重载会有所帮助,但 WebRequestHandler 中没有任何内容。也向我扑过来...

最佳答案

您可以使用Socket.Connect(string host, int port)

    private static bool TestForOpenHttpPort(string host)
{
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
s.Connect(host, 80);
return true;
}
catch (SocketException)
{
return false;
}
finally
{
((IDisposable)s).Dispose();
}
}

简单用法:

if (TestForOpenHttpPort("google.com"))
{
// socket is open
}

关于c# - 在尝试 HttpClient 连接之前测试开放端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15904008/

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