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

用Python编写一个简单的网络聊天程序

发布时间:2023-12-04 10:54:40

网络聊天程序是一个允许多个用户之间进行实时文本交流的应用程序。在Python中,可以使用Socket模块来编写网络聊天程序。下面是一个简单的网络聊天程序的示例代码:

import socket
import threading

# 服务器IP和端口号
SERVER_HOST = "127.0.0.1"
SERVER_PORT = 5050

# 创建一个TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP和端口号
server_socket.bind((SERVER_HOST, SERVER_PORT))
# 监听客户端连接
server_socket.listen()

# 存储在线用户的信息
online_users = []
# 存储所有聊天消息的记录
chat_history = []

def handle_client(client_socket, client_address):
    """用于处理每个客户端的通信"""
    while True:
        # 接收客户端发送的消息
        message = client_socket.recv(1024).decode()
        # 如果客户端发送的消息为空,则断开连接
        if not message:
            client_socket.close()
            online_users.remove(client_socket)
            break
        # 广播消息给所有在线用户
        broadcast(message)

def broadcast(message):
    """广播消息给所有在线用户"""
    for user in online_users:
        user.send(message.encode())

def start_chatting():
    """开始聊天"""
    print("聊天室已启动,等待客户端连接...")
    while True:
        # 接受客户端连接
        client_socket, client_address = server_socket.accept()
        # 存储在线用户的套接字
        online_users.append(client_socket)
        # 创建一个线程来处理每个客户端的通信
        client_thread = threading.Thread(target=handle_client, args=(client_socket, client_address))
        # 启动线程
        client_thread.start()

start_chatting()

上面的代码定义了一个简单的聊天服务器程序。它使用Socket模块创建一个TCP套接字,并绑定一个IP地址和端口号。然后,它开始监听客户端的连接请求。当有客户端连接时,它会创建一个新的线程来处理该客户端的通信。每当有客户端发送消息时,服务器会将消息广播给所有在线用户。如果一个客户端关闭了连接,服务器会将其套接字从在线用户列表中移除。

下面是一个简单的客户端的使用例子:

import socket
import threading

# 服务器IP和端口号
SERVER_HOST = "127.0.0.1"
SERVER_PORT = 5050

def receive_message(client_socket):
    """接收服务器发送的消息"""
    while True:
        try:
            # 接收消息
            message = client_socket.recv(1024).decode()
            print(message)
        except:
            # 发生错误时断开连接
            client_socket.close()
            break

def start_chatting():
    """开始聊天"""
    # 创建一个TCP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 连接服务器
    client_socket.connect((SERVER_HOST, SERVER_PORT))
    # 创建一个线程来接收服务器发送的消息
    receive_thread = threading.Thread(target=receive_message, args=(client_socket,))
    # 启动线程
    receive_thread.start()

    while True:
        # 发送消息给服务器
        message = input()
        client_socket.send(message.encode())

start_chatting()

上面的代码定义了一个简单的聊天客户端程序。它使用Socket模块创建一个TCP套接字,并连接到服务器的IP地址和端口号。然后,它创建一个线程来接收服务器发送的消息。在主线程中,它允许用户输入消息,并将其发送给服务器。用户也可以通过输入Ctrl+C来主动关闭客户端。

这个简单的网络聊天程序可以让多个用户之间进行实时的文本交流。用户可以通过运行多个客户端程序连接到服务器,并与其他用户进行聊天。用户发送的消息会被广播给所有在线用户。