2009-03-24 26 views

Respuesta

6

No se puede determinar si un puerto está disponible. Sólo se puede determinar

  1. que tienes el control de un puerto
  2. que un puerto estaba disponible en algún momento en el pasado

a menos que controles el puerto por tener una toma en particular enlazado y escucha en el puerto, es posible que venga otro proceso y tome el control del puerto.

La única manera confiable de saber si un puerto está disponible es intentar escucharlo. Si tiene éxito, entonces el puerto está disponible y usted tiene el control. De lo contrario, sabrá que en algún momento en el pasado y potencialmente el presente, el puerto fue controlado por otra entidad.

1

En cuanto a In C#, how to check if a TCP port is available?, creo que el cartel original no está seguro si está hablando de cliente o servidor, por lo que las respuestas son sobre el cliente que desea conectarse o el servidor que desea escuchar en un puerto.

La respuesta de JaredPar es correcta (¡más que ésta!) Aunque a veces puede ser inconveniente.

Si tiene la certeza de que ningún otro servidor está agarrando el puerto que acaba de comprobar (o no se preocupan por no ocasional), se puede tratar (de http://www.codeproject.com/Tips/268108/Find-the-open-port-on-a-machine-using-Csharp?msg=4176410#xx4176410xx, similar a 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; 
} 
Cuestiones relacionadas