1. <i id='2kyri'><tr id='2kyri'><dt id='2kyri'><q id='2kyri'><span id='2kyri'><b id='2kyri'><form id='2kyri'><ins id='2kyri'></ins><ul id='2kyri'></ul><sub id='2kyri'></sub></form><legend id='2kyri'></legend><bdo id='2kyri'><pre id='2kyri'><center id='2kyri'></center></pre></bdo></b><th id='2kyri'></th></span></q></dt></tr></i><div id='2kyri'><tfoot id='2kyri'></tfoot><dl id='2kyri'><fieldset id='2kyri'></fieldset></dl></div>

      <small id='2kyri'></small><noframes id='2kyri'>

        • <bdo id='2kyri'></bdo><ul id='2kyri'></ul>
        <tfoot id='2kyri'></tfoot><legend id='2kyri'><style id='2kyri'><dir id='2kyri'><q id='2kyri'></q></dir></style></legend>

        python3实现多线程聊天室

        时间:2023-12-17
          <legend id='23ypk'><style id='23ypk'><dir id='23ypk'><q id='23ypk'></q></dir></style></legend>
            <tbody id='23ypk'></tbody>
          • <bdo id='23ypk'></bdo><ul id='23ypk'></ul>
          • <small id='23ypk'></small><noframes id='23ypk'>

              • <tfoot id='23ypk'></tfoot>
                <i id='23ypk'><tr id='23ypk'><dt id='23ypk'><q id='23ypk'><span id='23ypk'><b id='23ypk'><form id='23ypk'><ins id='23ypk'></ins><ul id='23ypk'></ul><sub id='23ypk'></sub></form><legend id='23ypk'></legend><bdo id='23ypk'><pre id='23ypk'><center id='23ypk'></center></pre></bdo></b><th id='23ypk'></th></span></q></dt></tr></i><div id='23ypk'><tfoot id='23ypk'></tfoot><dl id='23ypk'><fieldset id='23ypk'></fieldset></dl></div>

                  Python3实现多线程聊天室主要涉及到socket编程和多线程编程两个方面。下面是实现的完整攻略:

                  1. 创建Socket服务器

                  我们需要使用Python的socket模块,这个模块用来创建套接字对象,并提供了一系列接口来进行网络通信。

                  首先,需要使用socket()函数来创建一个套接字对象,并指定使用的网络协议(IPV4或IPV6)和套接字类型(UDP或TCP),一般使用TCP协议来创建聊天室服务器。

                  import socket
                  
                  # 创建socket对象
                  server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                  
                  # 绑定IP地址和端口号
                  server_socket.bind(('localhost', 9999)) 
                  
                  # 设置最大连接数
                  server_socket.listen(5)
                  
                  1. 监听客户端连接

                  当有客户端想要连接聊天室服务器时,使用accept()函数来接受客户端连接请求,并返回一个新的套接字对象,用于客户端和服务器之间的通信。

                  while True:
                      # 等待客户端连接
                      client_socket, addr = server_socket.accept()
                  
                      # 创建一个线程用于处理客户端的消息
                      threading.Thread(target=message_handle, args=(client_socket,)).start()
                  
                  1. 处理客户端消息

                  当有客户端连上服务器之后,需要使用recv()函数来接受客户端发送的消息,并使用send()函数将消息发送给其他客户端。

                  def message_handle(client_socket):
                      while True:
                          # 接受客户端发送的消息
                          message = client_socket.recv(1024)
                  
                          # 将消息发送给其他客户端
                          for conn in CLIENT_LIST:
                              if conn is not client_socket:
                                  # 发送消息
                                  conn.send(message)
                  
                  1. 客户端维护

                  在处理客户端消息的时候,需要同时维护一个客户端列表,用于记录当前连接上服务器的所有客户端。

                  # 记录客户端连接
                  CLIENT_LIST = []
                  
                  def message_handle(client_socket):
                      global CLIENT_LIST
                  
                      # 将客户端套接字添加到客户端列表中
                      CLIENT_LIST.append(client_socket)
                  
                      while True:
                          # 接受客户端发送的消息
                          message = client_socket.recv(1024)
                  
                          # 将消息发送给其他客户端
                          for conn in CLIENT_LIST:
                              if conn is not client_socket:
                                  # 发送消息
                                  conn.send(message)
                  
                      # 关闭套接字
                      client_socket.close()
                  
                  1. 完整代码
                  import socket
                  import threading
                  
                  # 记录客户端连接
                  CLIENT_LIST = []
                  
                  # 创建socket对象
                  server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                  
                  # 绑定IP地址和端口号
                  server_socket.bind(('localhost', 9999)) 
                  
                  # 设置最大连接数
                  server_socket.listen(5)
                  
                  def message_handle(client_socket):
                      global CLIENT_LIST
                  
                      # 将客户端套接字添加到客户端列表中
                      CLIENT_LIST.append(client_socket)
                  
                      while True:
                          # 接受客户端发送的消息
                          message = client_socket.recv(1024)
                  
                          # 将消息发送给其他客户端
                          for conn in CLIENT_LIST:
                              if conn is not client_socket:
                                  # 发送消息
                                  conn.send(message)
                  
                      # 关闭套接字
                      client_socket.close()
                  
                  while True:
                      # 等待客户端连接
                      client_socket, addr = server_socket.accept()
                  
                      # 创建一个线程用于处理客户端的消息
                      threading.Thread(target=message_handle, args=(client_socket,)).start()
                  

                  示例1:多客户端在同一时刻向服务器发送消息

                  启动服务器后,打开两个终端分别连接聊天室服务器。在任一终端中输入消息,可以在另一终端看到同样的消息。

                  示例2:服务器记录聊天日志

                  在服务器的代码中,可以新增一个日志功能来记录聊天的情况,如下所示:

                  def message_handle(client_socket):
                      global CLIENT_LIST
                  
                      # 将客户端套接字添加到客户端列表中
                      CLIENT_LIST.append(client_socket)
                  
                      while True:
                          # 接受客户端发送的消息
                          message = client_socket.recv(1024)
                  
                          # 记录聊天日志
                          with open('chat_log.txt', 'a') as f:
                              f.write(message.decode('utf-8'))
                  
                          # 将消息发送给其他客户端
                          for conn in CLIENT_LIST:
                              if conn is not client_socket:
                                  # 发送消息
                                  conn.send(message)
                  
                      # 关闭套接字
                      client_socket.close()
                  

                  在服务器的运行目录下,会新增一个chat_log.txt文件用于记录聊天的内容。

                  上一篇:opencv+mediapipe实现人脸检测及摄像头实时示例 下一篇:详解Python多线程Selenium跨浏览器测试

                  相关文章

                  1. <i id='26zzu'><tr id='26zzu'><dt id='26zzu'><q id='26zzu'><span id='26zzu'><b id='26zzu'><form id='26zzu'><ins id='26zzu'></ins><ul id='26zzu'></ul><sub id='26zzu'></sub></form><legend id='26zzu'></legend><bdo id='26zzu'><pre id='26zzu'><center id='26zzu'></center></pre></bdo></b><th id='26zzu'></th></span></q></dt></tr></i><div id='26zzu'><tfoot id='26zzu'></tfoot><dl id='26zzu'><fieldset id='26zzu'></fieldset></dl></div>

                  2. <tfoot id='26zzu'></tfoot>
                    • <bdo id='26zzu'></bdo><ul id='26zzu'></ul>
                    <legend id='26zzu'><style id='26zzu'><dir id='26zzu'><q id='26zzu'></q></dir></style></legend>

                    1. <small id='26zzu'></small><noframes id='26zzu'>