1

我正在尝试使用多处理和套接字来允许多个连接到同一个套接字。但是,我真的很难过,因为我在这个领域没有太多经验。

我的代码不起作用

def server(port, listen=10):
    connected = []
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind(('', port))
    s.listen(listen)

    while True:

        conn, address = s.accept()
        p = multiprocessing.Process(target=server, args=(port, listen))
        p.start()
        p.join()
        command = raw_input("Command: ")
        conn.send(command)  

谢谢您的帮助

4

1 回答 1

0

这是因为您正在尝试循环创建多个服务器。单台服务器就足够你的任务了,不需要打开很多监听套接字。每个本地端口最多可能被一个监听套接字绑定——这就是你看到“地址正在使用”错误的原因。

试试 Python 标准TCPServer类,这比使用低级套接字要方便得多。

对于线程服务器,请参见此示例

在OS socket层面,这个方案只需要一个监听socket,每次接受新连接时都会产生新的socket(这是socketry的标准方式)。然后,您将在单独的线程中使用新套接字(请记住访问线程之间共享的公共数据)。

于 2012-07-22T17:55:49.450 回答