Pergunta

Estou olhando http://docs.python.org/library/socketserver.html Para tentar lidar com solicitações assíncronas com o SocketServer no Python. No fundo, há um exemplo, mas não faz sentido. Ele diz que você usa a porta 0 que atribui uma porta não utilizada arbitrária. Mas como você sabe qual porta usar para o cliente se eles não estão no mesmo programa? Não entendo muito bem como tornar isso útil.

Foi útil?

Solução

Como o cliente é implementado no mesmo script que o servidor, a porta é conhecida. Em um cenário do mundo real, você deve especificar uma porta para o seu daemon. Além de informar seus clientes sobre qual porta se conectar, você também pode precisar saber para que você possa abrir firewalls entre seus clientes e seu servidor.

Outras dicas

No exemplo que você vinculou, eles estão buscando a porta:

# Port 0 means to select an arbitrary unused port
HOST, PORT = "localhost", 0

server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
ip, port = server.server_address

No entanto, você realmente deveria estar olhando para www.twistedmatrix.com se você é sério sobre escrever o manuseio de assíncronos :)

Você precisa recuperar a porta que foi atribuída ao socketserver uma vez o bind está feito: neste caso, isso provavelmente será realizado ip, port = server.server_address.

A porta arbitrária é apenas se você deseja criar um servidor sem especificar uma porta: o sistema operacional atribuirá uma porta disponível.

É claro que também deve haver uma maneira de especificar a qual porta vincular.

server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address

...

client(ip, port, "Hello World 1")

O valor da porta 0 diz "Eu não me importo com o número da porta", então o server_address's port O valor é atribuído pela chamada ThreadTCPServer (). Não é zero. Mais tarde, você passa isso port valor para o cliente, que o usa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top