MST

星途 面试题库

面试题:Python中SocketServer TCP服务器和客户端基础实现

请用Python的SocketServer模块实现一个简单的TCP服务器和客户端。服务器要能够接收客户端发送的字符串,并将其反转后返回给客户端。请阐述实现过程中的关键步骤和涉及到的主要类与方法。
15.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

1. 实现TCP服务器

  1. 关键步骤
    • 导入SocketServer模块。
    • 定义一个请求处理类,继承自StreamRequestHandler类,并重写handle方法来处理客户端请求。
    • handle方法中读取客户端发送的数据,将其反转后再发送回客户端。
    • 创建TCPServer实例,绑定服务器地址和端口,并将定义的请求处理类传递给TCPServer
    • 启动服务器,使其持续监听客户端连接。
  2. 主要类与方法
    • SocketServer.TCPServer:用于创建TCP服务器实例。构造函数接受服务器地址(IP地址和端口号)和请求处理类作为参数。
    • SocketServer.StreamRequestHandler:处理来自客户端的流(stream)请求。需要继承此类并重写handle方法来实现具体的请求处理逻辑。
    • handle方法:在继承自StreamRequestHandler的类中重写此方法,在这个方法内处理客户端的请求,如读取数据、处理数据和发送响应。

以下是Python代码实现:

import SocketServer


class MyTCPHandler(SocketServer.StreamRequestHandler):
    def handle(self):
        data = self.rfile.readline().strip()
        reversed_data = data[::-1]
        self.wfile.write(reversed_data + b'\n')


if __name__ == "__main__":
    HOST, PORT = "localhost", 9999
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

2. 实现TCP客户端

  1. 关键步骤
    • 导入socket模块(虽然使用SocketServer模块实现服务器,但客户端一般使用socket模块直接操作)。
    • 创建一个TCP套接字对象。
    • 连接到服务器指定的地址和端口。
    • 向服务器发送字符串数据。
    • 接收服务器返回的数据,并打印出来。
    • 关闭套接字连接。
  2. 主要类与方法
    • socket.socket:用于创建套接字对象。构造函数接受地址族(如AF_INET表示IPv4)和套接字类型(如SOCK_STREAM表示TCP)作为参数。
    • connect方法:套接字对象的方法,用于连接到指定的服务器地址和端口。
    • sendall方法:用于向服务器发送数据,确保数据全部发送成功。
    • recv方法:用于从服务器接收数据,参数指定接收数据的最大长度。
    • close方法:关闭套接字连接。

以下是Python代码实现:

import socket


HOST, PORT = "localhost", 9999
data = "Hello, World!"

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
    sock.connect((HOST, PORT))
    sock.sendall(bytes(data + "\n", "utf - 8"))
    received = sock.recv(1024)

print("Sent:     {}".format(data))
print("Received: {}".format(received.decode("utf - 8").strip()))