用python写一个多人聊天utb的软件
时间: 2023-06-30 21:20:14 浏览: 239
实现多人聊天室需要使用到网络编程的知识,可以使用 Python 的 socket 模块来实现。下面是一个简单的多人聊天室程序的实现思路:
1. 创建一个服务器程序,用于接收客户端连接并将消息转发给其他客户端。
2. 创建多个客户端程序,用于连接到服务器,并发送和接收消息。
下面是一个简单的多人聊天室程序的实现代码:
1. 服务器端代码:
```python
import socket
import threading
# 创建一个 TCP socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置 socket 地址重用,避免程序异常退出后,无法立即重启
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定 IP 地址和端口号
server_socket.bind(("0.0.0.0", 8000))
# 开始监听客户端连接
server_socket.listen()
# 用来保存所有客户端 socket 对象的列表
client_sockets = []
# 用来保存所有客户端 IP 地址和端口号的字典
client_addresses = {}
def handle_client(client_socket, client_address):
"""处理客户端连接的线程函数"""
# 将客户端 socket 对象添加到列表中
client_sockets.append(client_socket)
# 将客户端 IP 地址和端口号添加到字典中
client_addresses[client_socket] = client_address
while True:
try:
# 接收客户端消息
message = client_socket.recv(1024).decode("utf-8")
# 将消息转发给所有客户端
for socket in client_sockets:
if socket != client_socket:
socket.send((str(client_address) + ": " + message).encode("utf-8"))
except:
# 出现异常,将客户端 socket 对象从列表中移除
client_sockets.remove(client_socket)
# 将客户端 IP 地址和端口号从字典中移除
del client_addresses[client_socket]
# 关闭客户端 socket 连接
client_socket.close()
# 退出线程
return
while True:
# 等待客户端连接
client_socket, client_address = server_socket.accept()
print("New connection:", client_address)
# 创建一个新的线程来处理客户端连接
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
```
2. 客户端代码:
```python
import socket
import threading
# 创建一个 TCP socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
client_socket.connect(("127.0.0.1", 8000))
def receive_message():
"""接收服务端消息的线程函数"""
while True:
try:
# 接收服务端消息
message = client_socket.recv(1024).decode("utf-8")
print(message)
except:
# 出现异常,退出线程
break
# 创建一个新的线程来接收服务端消息
receive_thread = threading.Thread(target=receive_message)
receive_thread.start()
while True:
# 发送消息给服务端
message = input("")
client_socket.send(message.encode("utf-8"))
```
以上是一个简单的多人聊天室程序的实现代码,你可以根据自己的需要进行修改和完善。
阅读全文