多处理和套接字

时间:2012-07-22 17:47:54

标签: python sockets multiprocessing

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

我的代码无效

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)  

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这是因为您尝试在循环中创建多个服务器。单个服务器适合您的任务,无需打开许多侦听套接字。每个本地端口最多可以绑定一个侦听套接字 - 这就是您看到“正在使用的地址”错误的原因。

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

对于线程服务器,请参阅this example

在OS套接字级别,此方案只需要一个侦听套接字,每次接受新连接时都会生成新套接字(这是标准的socketry方式)。然后你将在单独的线程上使用新的套接字(记住访问线程之间共享的公共数据)。