我正在尝试运行一个小型应用程序来扫描端口并检查它们是否打开并使用线程池进行练习。控制台窗口将询问一个数字并扫描从 1 到 X 的端口,并显示每个端口是打开还是关闭。我的问题是,当它通过每个端口时,它有时会过早停止。它也不会只停留在一个数字上,它非常随机。例如,我指定 200。控制台将滚动浏览每个端口,然后在 110 处停止。下次我运行它时,它会在 80 处停止。
代码省略了一些东西,假设所有变量都在它们应该声明的地方声明。第一部分在 Main。
static void Main(string[] args)
{
string portNum;
int convertedNum;
Console.WriteLine("Scanning ports 1-X");
portNum = Console.ReadLine();
convertedNum = Convert.ToInt32(portNum);
try
{
for (int i = 1; i <= convertedNum; i++)
{
ThreadPool.QueueUserWorkItem(scanPort, i);
Thread.Sleep(100);
}
}
catch (Exception e)
{
Console.WriteLine("exception " + e);
}
}
static void scanPort(object o)
{
TcpClient scanner = new TcpClient();
try
{
scanner.Connect("127.0.0.1",(int)o);
Console.WriteLine("Port {0} open", o);
}
catch
{
Console.WriteLine("Port {0} closed",o);
}
}
}