gpt4 book ai didi

c# - 如何在没有异常处理的情况下检查服务器是否正在监听

转载 作者:太空狗 更新时间:2023-10-30 01:10:38 27 4
gpt4 key购买 nike

我正在开发两个使用 TCP 相互连接的应用程序。有一次,其中一个正在尝试使用 TcpClient 进行连接,但不能保证另一个应用程序已经开始监听(使用 TcpListener)。

我的第一次尝试是这样的:

TcpClient c = null;
while (true)
{
try
{
c = new TcpClient();
c.NoDelay = true;
c.Connect( ip, port );
break;
}
catch (SocketException ex)
{
Console.WriteLine(string.Format("Could not connect to {0}:{1}, retrying...", ip, port));
Thread.Sleep( 500 );
}
}

但是,这个问题是它依赖于异常处理,这对我来说有点麻烦,因为我设置了 VS 来捕获任何抛出的异常(“调试 -> 异常...”菜单)。所以每次它尝试连接时,它都会进入 VS,我必须按继续。

我得到的异常是:

No connection could be made because the target machine actively refused it 127.0.0.1:50000

我想会有一种方法可以检查服务器是否正在监听特定端口,而无需实际尝试连接到它。我知道仅仅检查是不够的——服务器可能会在检查和连接尝试之间出现故障,但在我开发它时它对我来说仍然会好得多。

或者像这样:

TcpClient tcpClient = new TcpClient();
while ( !tcpClient.TryConnect(....) )
{ Thread.Sleep(1000); }

类似于此:

if (bool.TryParse( "false" ))
{ ... }

我还尝试使用异步方法(开始/结束连接)并手动设置 ManualResetEvent 的超时,但这也不起作用。我已经在互联网上搜索过了,但一直找不到解决这个问题的方法,这就是为什么我最终在这里发帖的原因:)

最佳答案

问题是 VS 正在中断异常?您始终可以让 VS 忽略特定的异常系列。

在 VS 中,在“调试”菜单中,选择“异常...”,然后在出现的对话框中您可以控制它。

关于c# - 如何在没有异常处理的情况下检查服务器是否正在监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4255820/

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