0

C#でポートスキャナーを作成しようとしていますが、これまでのところ:

private void ip()
{
    int start = 70;
    int end = 80;
    string ipString;
    if (this.comboBox1.Text == "Domain") {
         ipString= Dns.GetHostEntry(txtHost.Text).AddressList[0].ToString();
    }
    else {
        ipString = txtHost.Text;
    }
    TcpClient asd = new TcpClient();
    // MessageBox.Show(ipString);     
    IPAddress address = IPAddress.Parse(ipString);
    for (int i = start; i <= end; i++)
    {
        try
        {
            asd.SendTimeout = 3000;
            asd.ReceiveTimeout = 3000;
            asd.Connect(address, i);

            if (asd.Connected)
            {
                MessageBox.Show("Port " + i + " is open");
            }
        }
        catch
        {
            MessageBox.Show("Port " + i + " is closed");
        }
    }
}

ただし、閉じたポートの場合、処理が遅く、約 20 秒かかります。プロセスを高速化するにはどうすればよいですか? どうもありがとう。

4

3 に答える 3

1

スレッドを使用する必要があります。

http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx

チェックするポートごとに個別のスレッドを起動し、コールバックに、開いているポートと開いていないポートを通知させます。

于 2012-11-25T14:03:25.900 に答える
0

テストが完了したら、接続を閉じる必要があります。

ステートメントasd.Close();の最後で試してください。catch

それは私にとってプロセスを大幅にスピードアップしました。

于 2013-12-08T03:03:11.617 に答える
0

デリゲートと非同期関数を次のように宣言する必要があります (例では 2 つのパラメーター)。

public delegate void UpdateUIThreadDelegate(int par1, int par2);
void UpdateUIThread(int par1, int par2)
{
       ...
}

そして、次のように非同期関数を呼び出す必要があります。

this.Invoke(new UpdateUIThreadDelegate(UpdateUIThread), new object[] { par1, par2 });
于 2012-11-25T14:13:03.237 に答える