Pregunta

Quiero evitar codificar el número de puerto de la siguiente manera:

httpd = make_server('', 8000, simple_app)

La razón por la que estoy creando el servidor de esta manera es porque quiero usarlo como un 'núcleo' para una aplicación Adobe AIR para que se comunique usando PyAMF. Como estoy ejecutando esto en el lado del cliente, es muy posible que cualquier puerto que defina ya esté en uso. Si hay una mejor manera de hacer esto y estoy haciendo una pregunta incorrecta, hágamelo saber.

¿Fue útil?

Solución

El problema es que necesita un puerto conocido para que la aplicación lo use. Pero si le da un número de puerto 0, creo que el sistema operativo le proporcionará el primer puerto no utilizado disponible.

Otros consejos

  

El problema es que necesita un puerto conocido para que la aplicación lo use. Pero si le da un número de puerto 0, creo que el sistema operativo le proporcionará el primer puerto no utilizado disponible.

Tiene razón, señor. Así es como funciona:

>>> import socket
>>> s = socket.socket()
>>> s.bind(("", 0))
>>> s.getsockname()
('0.0.0.0', 54485)

Ahora tengo un socket vinculado al puerto 54485.

¿Es make_server una función que ha escrito? Más específicamente, ¿maneja el código que crea los sockets? Si lo hace, debería haber una forma en la que no especifique un número de puerto (o especifique 0 como número de puerto) y el sistema operativo elegirá uno disponible para usted.

Además de eso, puedes elegir un número de puerto aleatorio, como 54315 ... es poco probable que alguien lo use.

Los cortafuegos le permiten permitir o denegar el tráfico puerto por puerto. Solo por esta razón, una aplicación sin un puerto bien definido debe esperar encontrarse con todo tipo de problemas en la instalación de un cliente.

Digo que elija un puerto aleatorio y que sea muy fácil para el usuario cambiar el puerto si es necesario.

Aquí hay un buen punto de partida para puertos conocidos .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top