¿Hay alguna manera, usando C#, para determinar si un puerto está disponible? Me gustaría comprobar antes de iniciar una instancia de WCF ServiceHost utilizando un puerto que ya se utilizó :-)¿Determina si el puerto está en uso?
Respuesta
No se puede determinar si un puerto está disponible. Sólo se puede determinar
- que tienes el control de un puerto
- 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.
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;
}
- 1. Pruebe si el puerto remoto está en uso
- 2. ¿Determina si LTE está encendido?
- 3. java.lang.Exception: puerto 8083 ya está en uso
- 4. ¿Determina si una aplicación está bloqueada/ocupada?
- 5. ¿Cómo se determina si CKEditor está cargado?
- 6. JBoss - ExportException: El puerto ya está en uso: 1098
- 7. Comprueba si el puerto en serie está escuchando
- 8. comprobar si el puerto está abierto en ANT
- 9. Compruebe si un puerto está abierto
- 10. Pruebe si el puerto está abierto y reenviado usando PHP
- 11. ¿Cómo se determina si una interfaz es un puerto LAN físico en una PC con Windows?
- 12. Servidor web IIS Express: (cada) puerto está en uso?
- 13. ¿Determina si la pestaña del navegador está activa? - IE?
- 14. Java LDAP: ¿Determina si el usuario está en un grupo determinado?
- 15. Script de proceso por lotes de Windows para imprimir mensaje de error si el puerto está en uso
- 16. Delphi: compruebe si el archivo está en uso
- 17. Comprobación de PHP si el archivo está en uso
- 18. Python PySerial.¿Cómo saber si un puerto ya está abierto?
- 19. ¿Determina el uso de energía programáticamente en Windows?
- 20. ¿Determina si existe una actividad en el dispositivo actual?
- 21. Error de comunicación del puerto serie, "El recurso solicitado está en uso".
- 22. ¿Cómo se determina el uso de stat() si un archivo es un enlace simbólico?
- 23. ¿Determina si la página actual requiere autorización?
- 24. ¿Determina si $ sth tiene filas sin consumirlo?
- 25. ¿Cómo se determina si un objeto está bloqueado (sincronizado) para no bloquearlo en Java?
- 26. C# compruebe si un puerto COM (en serie) ya está abierto
- 27. Error con el puerto 8080 ya en uso
- 28. En Java, ¿cómo se determina si se está ejecutando un subproceso?
- 29. ¿Determina si el usuario puede acceder a la página solicitada?
- 30. ¿Determina si una lista de Python es el 95% igual?