【发布时间】:2012-01-24 03:14:22
【问题描述】:
我正在创建一个小工具,让我可以像这样检查给定 IP 和端口号的端口状态:
private void ScanPort(IPAddress address, int port)
{
using (TcpClient client = new TcpClient())
{
try
{
client.Connect(address, port);
txtDisplay.AppendText("Port: " + nudFrom.Value.ToString() +
" is open." + Environment.NewLine);
}
catch (SocketException)
{
txtDisplay.AppendText("Port: " + nudFrom.Value.ToString() +
" is closed." + Environment.NewLine);
}
}
}
问题是,当端口打开时,检查大约需要一秒钟,如果端口关闭,则该过程大约需要 20 秒时间。
如何更快地检查打开/关闭的端口?
【问题讨论】:
-
因为抛出和捕获异常很慢。如果您可以避免对控制流使用异常,您可能会解决速度问题。
-
@Cody Gray,当端口打开时它确实有帮助,只是为了使用 client.connected 但我不确定如何避免 try/catch,因为如果端口关闭它会抛出异常。
标签: c# winforms tcpclient port-scanning