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

如何使用Python实现一个简单的网络聊天程序

发布时间:2023-12-04 09:29:59

实现一个简单的网络聊天程序可以使用Python内置的socket库来实现网络通信,下面是一个使用Python编写的简单网络聊天程序的示例代码:

# server.py
import socket
import threading

def handle_client(client_socket):
    while True:
        try:
            # 接收客户端发来的消息
            data = client_socket.recv(1024).decode()
            if not data:
                break
            print("收到消息:", data)
            
            # 发送消息给客户端
            response = "服务器收到消息:" + data
            client_socket.sendall(response.encode())
        except:
            break
    
    # 关闭客户端连接
    client_socket.close()

def start_server():
    # 创建 Socket 对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定 IP 地址和端口号
    server_address = ('localhost', 8888)
    server_socket.bind(server_address)

    # 监听客户端连接
    server_socket.listen(5)
    print("等待客户端连接...")

    while True:
        # 接受客户端连接
        client_socket, client_address = server_socket.accept()
        print("客户端已连接:", client_address)

        # 创建线程处理客户端请求
        client_thread = threading.Thread(target=handle_client, args=(client_socket,))
        client_thread.start()

# 启动聊天服务器
start_server()

# client.py
import socket

def start_client():
    # 创建 Socket 对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 连接服务器
    server_address = ('localhost', 8888)
    client_socket.connect(server_address)

    while True:
        # 输入要发送的消息
        message = input("请输入要发送的消息:")
        if message == "exit":
            break

        # 发送消息到服务器
        client_socket.sendall(message.encode())

        # 接收服务器的消息
        response = client_socket.recv(1024).decode()
        print("收到服务器的消息:", response)

    # 关闭客户端连接
    client_socket.close()

# 启动聊天客户端
start_client()

以上代码实现了一个简单的网络聊天程序,包括一个服务器端和一个客户端。服务器端等待客户端的连接,接收客户端发来的消息,并将接收到的消息发送回客户端。客户端与服务器建立连接后,可以输入要发送的消息,并接收服务器的响应消息。

使用时首先运行server.py启动服务器端,然后再运行client.py启动客户端,即可实现聊天功能。客户端通过命令行界面输入要发送的消息,回车后消息将被发送到服务器,然后接收服务器的响应消息并在命令行界面显示出来。

注意:上述代码实现的是一个简单的单线程聊天程序,只能同时处理一个客户端连接。如果需要支持多个客户端连接,可以使用多线程或异步编程的方式进行扩展。