ポートをスキャンし、ポートが開いているかどうかを確認し、スレッドプールを使用して練習する小さなアプリを実行しようとしています。コンソール ウィンドウは番号を尋ね、ポートを 1 から X までスキャンし、各ポートが開いているか閉じているかを表示します。私の問題は、各ポートを通過するときに途中で停止することがあることです。1つの数字にとどまらず、かなりランダムです。たとえば、200 を指定します。コンソールは各ポートをスクロールし、110 で停止します。次に実行すると、80 で停止します。
コード いくつかのことを省きます。すべての変数が宣言されるべき場所で宣言されていると仮定します。最初の部分はメインです。
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);
}
}
}