TCP ポートを非同期的にスキャンしようとしています。開いているポートが完了するのに数百ミリ秒しかかからないので問題ありませんが、ポートが閉じられると、応答を待たなければなりません。
そのため、アプリを実行すると、すぐにポート 80 が開いていることがわかります。次に、他のすべてのポートがスキャンされるまで 30 分ほど待つ必要があります。
編集。さらに、他のポートがチェックされるのを待たずに、応答が発生したときに表示したいと思います。
これをより速くする方法は?
private void btnStart_Click(object sender, EventArgs e)
{
for (int port = 79; port < 90; port++)
{
ScanPort(port);
}
}
private void ScanPort(int port)
{
TcpClient client = new TcpClient();
client.BeginConnect(IPAddress.Parse("74.125.226.84"), port, new AsyncCallback(CallBack), client);
}
private void CallBack(IAsyncResult result)
{
bool connected = false;
using (TcpClient client = (TcpClient)result.AsyncState)
{
try
{
client.EndConnect(result);
connected = client.Connected;
}
catch (SocketException)
{
}
}
if (connected)
{
this.Invoke((MethodInvoker)delegate
{
txtDisplay.Text += "open2" + Environment.NewLine;
});
}
else
{
this.Invoke((MethodInvoker)delegate
{
txtDisplay.Text += "closed2" + Environment.NewLine;
});
}
}