python多人聊天室 跨主机_python+tcp实现多人聊天室
时间: 2023-08-04 15:31:32 浏览: 288
Python实现的多人聊天室源码,基于socket tcp通信,使用tkinter做客户端界面,含可执行文件
5星 · 资源好评率100%
实现一个多人聊天室需要涉及到网络编程以及并发编程。在Python中,可以通过TCP协议来实现多人聊天室。
下面是一个跨主机的Python+TCP实现多人聊天室的简单示例代码:
```python
import socket
import threading
# 服务器IP地址和端口号
SERVER_HOST = '0.0.0.0'
SERVER_PORT = 8000
# 客户端列表
clients = []
def broadcast(message):
"""
广播消息给所有客户端
"""
for client in clients:
client.send(message)
def handle_client(client):
"""
处理客户端连接
"""
while True:
try:
message = client.recv(1024)
if message:
print(f"[{client.getpeername()}]: {message.decode('utf-8')}")
message_to_broadcast = f"[{client.getpeername()}]: {message.decode('utf-8')}".encode('utf-8')
broadcast(message_to_broadcast)
else:
remove(client)
except:
remove(client)
def remove(client):
"""
客户端断开连接
"""
if client in clients:
clients.remove(client)
client.close()
if __name__ == "__main__":
# 创建服务器套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_socket.bind((SERVER_HOST, SERVER_PORT))
server_socket.listen()
print(f"[*] Listening on {SERVER_HOST}:{SERVER_PORT}")
while True:
client_socket, client_address = server_socket.accept()
print(f"[*] Accepted connection from {client_address[0]}:{client_address[1]}")
clients.append(client_socket)
client_thread = threading.Thread(target=handle_client, args=(client_socket,))
client_thread.start()
```
在上述代码中,我们使用了Python的socket模块来创建TCP服务器和客户端套接字,使用了Python的threading模块来进行并发处理。我们定义了一个`broadcast`函数来广播消息给所有客户端,定义了一个`handle_client`函数来处理客户端连接,定义了一个`remove`函数来处理客户端断开连接。
在`handle_client`函数中,我们使用了一个死循环来持续处理客户端发送的消息。当接收到消息时,我们使用`broadcast`函数将该消息广播给所有客户端。当客户端断开连接时,我们使用`remove`函数将该客户端从客户端列表中移除。
在`__main__`函数中,我们创建服务器套接字,监听客户端连接。当有新的客户端连接时,我们将其添加到客户端列表中,并使用一个新的线程来处理该客户端连接。
这是一个简单的跨主机Python+TCP实现多人聊天室的示例代码,你可以在此基础上进行扩展和优化。
阅读全文