4

我正在寻找http://docs.python.org/library/socketserver.html来尝试使用 python 中的 socketserver 处理异步请求。在最底部有一个例子,但它没有意义。它说您使用端口 0,它分配了一个任意未使用的端口。但是,如果它们不在同一个程序中,你怎么知道客户端使用哪个端口呢?我不太明白如何使它有用。

4

4 回答 4

9

由于客户端是在与服务器相同的脚本中实现的,因此端口是已知的。在实际场景中,您应该为您的守护程序指定一个端口。除了让您的客户端知道要连接哪个端口外,您可能还需要知道以便您可以在客户端和服务器之间打开防火墙。

于 2009-11-19T14:18:19.587 回答
5

在您链接的示例中,他们正在获取端口:

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

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

但是,如果您认真考虑编写异步处理,您真的应该查看 www.twistedmatrix.com :)

于 2009-11-19T14:18:12.193 回答
2

socketserver一旦完成,您需要检索分配给 的端口bind:在这种情况下,这可能会通过ip, port = server.server_address.

任意端口只是如果您想在不指定端口的情况下创建服务器:操作系统将分配一个可用端口。

当然,还必须有一种方法来指定要绑定到哪个端口。

于 2009-11-19T14:15:13.117 回答
0
server = ThreadedTCPServer((HOST, 0), ThreadedTCPRequestHandler)
ip, port = server.server_address

...

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

PORT 值 0 表示“我不在乎它是什么端口号”,因此 server_address 的port值由 ThreadedTCPServer() 调用分配。它不是零。稍后,您将该port值传递给使用它的客户端。

于 2009-11-19T14:19:38.930 回答