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

使用Python构建可定制的服务器

发布时间:2023-12-16 10:00:45

在Python中,可以使用socket模块来构建可定制的服务器。以下是一个简单的例子,说明如何使用Python构建一个基于TCP协议的服务器。

import socket
import threading

class Server:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.server_socket = None
        self.client_sockets = []
        self.is_running = False

    def start(self):
        self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.server_socket.bind((self.host, self.port))
        self.server_socket.listen(5)

        self.is_running = True
        print(f"Server started on {self.host}:{self.port}")

        self.accept_clients()

    def accept_clients(self):
        while self.is_running:
            client_socket, client_address = self.server_socket.accept()
            self.client_sockets.append(client_socket)

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

            print(f"New client connected: {client_address[0]}:{client_address[1]}")

    def handle_client(self, client_socket):
        while self.is_running:
            try:
                data = client_socket.recv(1024).decode()
                if data:
                    # Customize server logic here
                    response = f"Server says: {data.upper()}"
                    client_socket.send(response.encode())
                else:
                    client_socket.close()
                    self.client_sockets.remove(client_socket)
                    break
            except ConnectionResetError:
                client_socket.close()
                self.client_sockets.remove(client_socket)
                break

    def stop(self):
        self.is_running = False
        for client_socket in self.client_sockets:
            client_socket.close()
        self.server_socket.close()

        print("Server stopped")

# 创建服务器实例
server = Server('localhost', 8080)

# 启动服务器
server.start()

使用以上代码,我们可以创建一个基于TCP协议的服务器,并将客户端发送的消息转为大写字母后返回。以下是一个简单的客户端程序,用于与服务器进行交互:

import socket

host = 'localhost'
port = 8080

# 创建客户端套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
client_socket.connect((host, port))

while True:
    message = input("Enter a message (or 'quit' to exit): ")

    if message.lower() == 'quit':
        break

    # 向服务器发送消息
    client_socket.send(message.encode())

    # 接收服务器的响应
    response = client_socket.recv(1024).decode()
    print(response)

# 关闭套接字
client_socket.close()

将以上代码保存为一个Python脚本,分别运行服务器和客户端脚本。客户端可以通过输入消息与服务器进行交互,并接收服务器返回的响应。服务器可以根据自己的需求进行自定义逻辑处理,并对不同的消息返回不同的响应。

需要注意的是,以上代码只是一个简单示例,不包含错误处理和安全性考虑。在实际生产环境中,还需根据具体需求进行相应的改进和优化。