2009-03-24 15 views

Antwort

6

Sie können nicht feststellen, ob ein Port verfügbar ist. Sie können nur

  1. bestimmen, dass Sie die Kontrolle über einen Port haben
  2. , dass ein Port an einem gewissen Punkt in der Vergangenheit

verfügbar war Sofern Sie den Port steuern, indem eine bestimmte Socket gebunden ist und Zuhören Am Port ist es möglich, dass ein anderer Prozess die Kontrolle über den Port übernimmt.

Die einzige zuverlässige Möglichkeit zu wissen, ob ein Port verfügbar ist, besteht darin, zu versuchen, darauf zu hören. Wenn Sie Erfolg haben, ist der Port verfügbar und Sie haben die Kontrolle. Sonst weißt du, dass der Port irgendwann in der Vergangenheit und möglicherweise der Gegenwart von einer anderen Entität gesteuert wurde.

1

Wie für In C#, how to check if a TCP port is available? denke ich, das Original-Poster ist nicht wirklich sicher, ob er über Client oder Server spricht, so auch die Antworten sind entweder über Client will Verbindung oder Server will auf einem Port zu hören.

JaredPars Antwort ist richtig (mehr als diese!), Obwohl manchmal vielleicht unbequem.

Wenn Sie sicher sind, dass kein anderer Server den Port greifen Sie gerade überprüft (oder ist es egal, für gelegentliche Fehler), können Sie versuchen (von http://www.codeproject.com/Tips/268108/Find-the-open-port-on-a-machine-using-Csharp?msg=4176410#xx4176410xx, ähnlich wie https://stackoverflow.com/a/570461/586754):

public static int GetOpenPort(int startPort = 2555) 
{ 
    int portStartIndex = startPort; 
    int count = 99; 
    IPGlobalProperties properties = IPGlobalProperties.GetIPGlobalProperties(); 
    IPEndPoint[] tcpEndPoints = properties.GetActiveTcpListeners(); 

    List<int> usedPorts = tcpEndPoints.Select(p => p.Port).ToList<int>(); 
    int unusedPort = 0; 

    unusedPort = Enumerable.Range(portStartIndex, 99).Where(port => !usedPorts.Contains(port)).FirstOrDefault(); 
    return unusedPort; 
} 
Verwandte Themen