使用socket实现聊天室并显示详细代码
时间: 2024-01-31 14:04:52 浏览: 28
好的,下面是一个简单的聊天室的实现代码,使用 Python 的 socket 模块:
服务端代码:
```python
import socket
import threading
# 设置服务器信息
HOST = '127.0.0.1'
PORT = 8000
# 创建 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定地址和端口
server_socket.bind((HOST, PORT))
# 开始监听
server_socket.listen()
# 客户端列表
clients = []
# 处理客户端连接的函数
def handle_client(client_socket, addr):
print(f'New client {addr} connected')
clients.append(client_socket)
while True:
try:
data = client_socket.recv(1024)
except Exception as e:
print(f'Client {addr} disconnected')
clients.remove(client_socket)
break
if not data:
print(f'Client {addr} disconnected')
clients.remove(client_socket)
break
message = data.decode('utf-8')
print(f'Received message from {addr}: {message}')
# 将消息广播给其它客户端
for c in clients:
if c != client_socket:
c.sendall(data)
# 接受客户端连接的循环
while True:
client_socket, addr = server_socket.accept()
# 处理客户端连接的线程
client_thread = threading.Thread(target=handle_client, args=(client_socket, addr))
client_thread.start()
```
客户端代码:
```python
import socket
import threading
# 设置服务器信息
HOST = '127.0.0.1'
PORT = 8000
# 创建 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
client_socket.connect((HOST, PORT))
# 处理接收消息的函数
def handle_receive():
while True:
data = client_socket.recv(1024)
if not data:
break
message = data.decode('utf-8')
print(message)
# 启动接收消息的线程
receive_thread = threading.Thread(target=handle_receive)
receive_thread.start()
# 处理发送消息的循环
while True:
message = input('Enter message: ')
if not message:
break
data = message.encode('utf-8')
client_socket.sendall(data)
# 关闭连接
client_socket.close()
```
运行服务端代码后,可以启动多个客户端连接到服务器进行聊天。每当一个客户端发送消息时,服务器会将这条消息广播给其它所有客户端。