Python中的msg()函数实现多人即时通信功能
发布时间:2023-12-19 04:53:06
在Python中实现多人即时通信功能可以使用socket和threading模块。具体的实现步骤如下:
1. 导入socket和threading模块。
import socket import threading
2. 创建一个Socket对象,并指定IP地址和端口号。
server_ip = 'localhost' # 服务器IP地址 server_port = 12345 # 服务器端口号 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server_socket.bind((server_ip, server_port))
3. 定义一个函数来处理客户端的连接请求。
def handle_client(client_socket, client_address):
while True:
try:
# 接收消息
msg = client_socket.recv(1024).decode('utf-8')
if msg == 'exit':
# 客户端请求断开连接
client_socket.close()
break
else:
# 广播消息给所有客户端
broadcast(msg, client_address)
except:
# 客户端异常断开连接
client_socket.close()
break
4. 定义一个函数来广播消息给所有客户端。这个函数需要记录已连接的客户端信息。
def broadcast(msg, client_address):
# 遍历所有已连接的客户端
for client_socket, address in clients:
# 不发送消息给发送者本身
if address != client_address:
try:
# 发送消息
client_socket.sendall(msg.encode('utf-8'))
except:
# 客户端异常断开连接
client_socket.close()
clients.remove((client_socket, address))
5. 创建一个列表来存储所有已连接的客户端。
clients = []
6. 启动服务器,等待客户端连接请求。
server_socket.listen()
print('等待客户端连接...')
while True:
# 接受客户端连接请求
client_socket, client_address = server_socket.accept()
# 将客户端加入到列表中
clients.append((client_socket, client_address))
# 创建一个线程处理客户端连接
client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
client_thread.start()
7. 编写客户端程序,连接到服务器并发送消息。
client_ip = 'localhost' # 服务器IP地址
client_port = 12345 # 服务器端口号
def send_msg():
while True:
# 输入消息
msg = input('请输入消息:')
if msg == 'exit':
# 断开连接
client_socket.close()
break
else:
# 发送消息
client_socket.sendall(msg.encode('utf-8'))
# 创建一个Socket对象,连接到服务器
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((client_ip, client_port))
# 创建一个线程发送消息
send_thread = threading.Thread(target=send_msg)
send_thread.start()
# 接收服务器发送的消息
while True:
try:
msg = client_socket.recv(1024).decode('utf-8')
print('收到消息:', msg)
except:
break
使用例子:
1. 启动服务器。
等待客户端连接...
2. 启动两个客户端,并输入消息。
客户端1:
请输入消息:Hello, client 2!
客户端2:
请输入消息:Hello, client 1!
3. 服务器会将消息广播给所有客户端。
服务器:
收到消息:Hello, client 2!
服务器:
收到消息:Hello, client 1!
4. 客户端之间可以继续发送消息,并且可以使用'exit'命令来断开连接。
客户端1:
请输入消息:Goodbye, client 2! exit
客户端2:
请输入消息:Goodbye, client 1! exit
服务器:
收到消息:Goodbye, client 2!
服务器:
收到消息:Goodbye, client 1!
服务器:
等待客户端连接...
