【问题标题】:How can I keep a list of connected clients in a list in python?如何在 python 的列表中保留已连接客户端的列表?
【发布时间】:2021-12-31 00:36:02
【问题描述】:

如何在 python 中保留已连接客户端的列表,以便每当我需要从特定客户端请求文件时,我可以指定我需要来自哪个客户端的文件?下面是我为多个连接创建多线程的代码。

def main():
    print("Starting the server")
    server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) ## used IPV4 and TCP connection
    server.bind(ADDR) # bind the address
    server.listen() ## start listening
    print(f"server is listening on {IP}: {PORT}")
    while True:
        conn, addr = server.accept() ### accept a connection from a client
        thread = threading.Thread(target = handle_client, args = (conn, addr)) ## assigning a thread for each client
        thread.start()


if __name__ == "__main__":
    main()

【问题讨论】:

    标签: python sockets networking


    【解决方案1】:

    不是列表的工作,而是关联映射的工作,在python中称为dictionary。

    因此,您可以通过使用键(例如,字符串或数字)标识连接来将连接放入字典中。

    这是基本的python,所以我将向您推荐python.org tutorial;如果您想自己取得进展,前几章确实强制性;读完2、3、4,“数据结构”一章就简单了。

    【讨论】:

      【解决方案2】:

      它可能会变得复杂。首先,您可以使用dict 将客户端地址映射到其连接对象。例如,您可以创建 client_connections 来完成这项工作:

      client_connections = {}
      
      def main():
          print("Starting the server")
          server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) ## used IPV4 and TCP connection
          server.bind(ADDR) # bind the address
          server.listen() ## start listening
          print(f"server is listening on {IP}: {PORT}")
          while True:
              conn, addr = server.accept() ### accept a connection from a client
              client_connections[addr] = conn
              thread = threading.Thread(target = handle_client, args = (conn, addr)) ## assigning a thread for each client
              thread.start()
      
      
      if __name__ == "__main__":
          main()
      

      现在您可以通过client_connections.keys() 列出客户端地址/端口号,并通过client_connections[some_address] 获取连接。这些只是网络级地址,不是友好名称。

      您需要在连接关闭时删除该条目。如果您想要更多用户友好的名称,您的协议将必须有一种方法来来回传递。然后您可以创建一个新的名称映射到 ip/端口连接。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 2011-09-27
        • 2010-12-12
        • 1970-01-01
        • 2012-04-03
        相关资源
        最近更新 更多