Question

Je crée un petit outil qui me permet de vérifier l'état des ports de numéro IP et de port donné comme ceci:

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);
        }
    }
}

Le problème est que lorsque le port est ouvert, il faut environ une seconde pour vérifier et si le port est fermé, le processus prend environ 20 secondes.

Comment rendre la vérification des ports ouverts / fermés plus rapidement?

Était-ce utile?

La solution

Une option serait de l'implémenter à l'aide de sockets bruts dans quelque chose comme SharPPCAP ou PCAP.net et d'attraper la réponse de défaillance ICMP. Une approche plus simple consisterait à étudier la réduction du délai d'attente. Iciest quelques idées sur la façon de le faire. Ici«SA Question liée qui pourrait également aider.

Si vous cherchez strictement des moyens d'améliorer les performances du code que vous avez publié, vous pouvez envisager de pinging à l'adresse avant d'essayer d'y connecter (en supposant que cela est lié à votre question antérieure sur les hôtes distants d'Arp's), et depuis La chaîne est immuable le + L'opérateur est généralement plus lent que d'utiliser quelque chose comme String.Format. Ces suggestions ne réduiront pas les secondes de votre traitement (en fait, vous ne pourrez probablement pas faire une différence).

Autres conseils

J'ai créé un outil comme celui-ci pour rediriger toutes les adresses IP sur un réseau et récupérer la réponse.

J'ai utilisé le .NET 4.0 parallèle pour / foreach pour cela. Cela a considérablement augmenté les performances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top