欢迎访问宙启技术站
智能推送

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!

服务器:

等待客户端连接...