作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发两个使用 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/
我是一名优秀的程序员,十分优秀!