Linux Python构建一个多人聊天室,详细代码
时间: 2024-03-18 17:42:41 浏览: 110
好的,下面是一个详细的多人聊天室的实现代码,使用了Python的socket和threading库:
服务端代码:
```python
import socket
import threading
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 绑定端口号
server_socket.bind((host, port))
# 等待客户端连接
server_socket.listen(5)
# 客户端处理线程
def client_handler(client_socket, addr):
while True:
try:
data = client_socket.recv(1024)
if not data:
break
print("{}:{} says: {}".format(addr[0], addr[1], data.decode()))
# 广播消息给所有客户端
broadcast("{}:{} says: {}".format(addr[0], addr[1], data.decode()))
except:
break
client_socket.close()
# 广播消息给所有客户端
def broadcast(msg):
for client in clients:
client.send(msg.encode())
# 主线程等待客户端连接
clients = []
while True:
# 等待客户端连接
client_socket, addr = server_socket.accept()
print("Got a connection from {}:{}".format(addr[0], addr[1]))
# 添加客户端到列表
clients.append(client_socket)
# 创建一个新线程处理客户端请求
client_thread = threading.Thread(target=client_handler, args=(client_socket, addr))
client_thread.start()
```
客户端代码:
```python
import socket
import threading
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口号
port = 9999
# 连接服务端
client_socket.connect((host, port))
# 发送消息线程
def send_handler():
while True:
msg = input("")
client_socket.send(msg.encode())
# 接收消息线程
def recv_handler():
while True:
data = client_socket.recv(1024)
if not data:
break
print(data.decode())
# 创建发送消息线程和接收消息线程
send_thread = threading.Thread(target=send_handler)
recv_thread = threading.Thread(target=recv_handler)
# 启动线程
send_thread.start()
recv_thread.start()
```
以上代码实现了一个简单的多人聊天室,可以通过多个客户端连接到服务端并在不同的线程中处理客户端请求。注意,以上代码只是一个简单的示例,实际应用中需要考虑更多的情况,如异常处理、多线程同步等。
阅读全文