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

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

发布时间:2023-12-04 08:45:48

下面是一个使用Python编写的简易网络聊天程序的例子:

import socket
import threading

def handle_client(client_socket, addr):
    while True:
        try:
            data = client_socket.recv(1024).decode()
            if not data:
                break
            print("[{}] {}".format(addr, data))

            response = input("Reply [{}] : ".format(addr))
            client_socket.send(response.encode())
        except Exception as e:
            print("[ERROR] {}".format(str(e)))
            break

    print("[INFO] Connection closed: {}".format(addr))
    client_socket.close()

def start_server():
    HOST = "localhost"   # 主机名
    PORT = 5000          # 端口号

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((HOST, PORT))
    server_socket.listen(5)
    print("[INFO] Server started on {}:{}".format(HOST, PORT))

    while True:
        client_socket, addr = server_socket.accept()
        print("[INFO] New connection from {}:{}".format(addr[0], addr[1]))

        client_thread = threading.Thread(target=handle_client, args=(client_socket, addr))
        client_thread.start()

def start_client():
    HOST = "localhost"   # 服务器主机名
    PORT = 5000          # 服务器端口号

    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((HOST, PORT))
    print("[INFO] Connected to {}:{}".format(HOST, PORT))

    while True:
        try:
            message = input("Send to server: ")
            client_socket.send(message.encode())

            response = client_socket.recv(1024).decode()
            print("[Server] {}".format(response))
        except Exception as e:
            print("[ERROR] {}".format(str(e)))
            break

    client_socket.close()

if __name__ == "__main__":
    mode = input("Select mode [Server/Client]: ").lower()

    if mode == "server":
        start_server()
    elif mode == "client":
        start_client()
    else:
        print("Invalid mode, please select 'Server' or 'Client'.")

上面的代码通过使用Python的socket模块,创建了一个简易的网络聊天程序。程序可以同时运行在服务器端和客户端。

服务器端通过start_server函数创建一个socket对象并监听连接请求。一旦有客户端连接到服务器,程序会创建一个新的线程来处理该客户端的请求。在handle_client函数中,服务器接收到客户端的消息并打印出来,然后等待用户输入回复。回复被发送给客户端,然后服务器继续等待下一条消息。

客户端通过start_client函数创建一个socket对象并连接到服务器。然后,通过用户输入发送消息给服务器,并等待服务器的回复。

你可以选择运行程序作为服务器或客户端,只需在运行时选择相应的模式。

下面是一个示例:

1. 先运行程序作为服务器:

Select mode [Server/Client]: server
[INFO] Server started on localhost:5000

2. 再运行程序作为客户端:

Select mode [Server/Client]: client
[INFO] Connected to localhost:5000
Send to server: Hello, how are you?
[Server] Hi, I'm good. How about you?
Send to server: I'm doing great!
[Server] That's great to hear!
Send to server: Bye!
[Server] Goodbye!

上面的示例中,客户端发送了几条消息给服务器,并收到了服务器的回复。

这就是一个简单的使用Python编写的网络聊天程序。你可以根据自己的需求进行扩展和修改。