写一个较为复杂的Python项目
时间: 2024-03-10 16:46:45 浏览: 195
好的,以下是一个较为复杂的 Python 项目,一个简单的在线聊天室:
```python
import threading
import socket
class ChatRoom:
def __init__(self):
self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server_socket.bind(("localhost", 8000))
self.server_socket.listen(5)
self.clients = []
def broadcast(self, message, sender):
for client in self.clients:
if client != sender:
try:
client.send(message.encode())
except:
self.clients.remove(client)
def handle_client(self, client_socket, client_address):
print(f"客户端 {client_address} 已连接。")
self.clients.append(client_socket)
client_socket.send("欢迎来到聊天室!".encode())
while True:
try:
message = client_socket.recv(1024).decode()
if message:
self.broadcast(message, client_socket)
except:
self.clients.remove(client_socket)
print(f"客户端 {client_address} 已断开连接。")
break
def start(self):
print("聊天室已启动,等待客户端连接...")
while True:
client_socket, client_address = self.server_socket.accept()
client_thread = threading.Thread(target=self.handle_client, args=(client_socket, client_address))
client_thread.daemon = True
client_thread.start()
if __name__ == "__main__":
chat_room = ChatRoom()
chat_room.start()
```
这个项目实现了一个简单的在线聊天室,使用了多线程和套接字编程。程序启动后会监听 8000 端口,等待客户端连接。当客户端连接后,程序会将客户端加入客户端列表,并向客户端发送欢迎消息。当客户端发送消息时,程序会将消息广播给除发送者外的所有客户端。
这个项目比前面的例子复杂一些,但是也非常有用。它涉及到了多线程、套接字编程、异常处理等概念,可以帮助初学者深入了解 Python 的网络编程。同时,这个项目还可以扩展,例如添加用户名、私聊功能等。
阅读全文