MST
星途 面试题库

面试题:Python网络编程中TCP协议数据传输的实现

请用Python代码实现一个简单的基于TCP协议的客户端和服务器端的数据传输,要求服务器端能够接收客户端发送的字符串,并将其反转后返回给客户端。请简要说明代码中各个部分的作用。
31.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

服务器端代码

import socket


def reverse_string(data):
    return data[::-1]


server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('127.0.0.1', 12345))
server_socket.listen(1)
print('服务器正在监听...')

while True:
    client_socket, client_address = server_socket.accept()
    print(f'与 {client_address} 建立连接')
    data = client_socket.recv(1024).decode('utf-8')
    reversed_data = reverse_string(data)
    client_socket.send(reversed_data.encode('utf-8'))
    client_socket.close()

代码解释

  1. 导入socket模块import socket,用于进行网络编程,实现TCP协议。
  2. 定义字符串反转函数reverse_string函数,使用切片操作[::-1]将传入的字符串反转。
  3. 创建服务器套接字server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM),使用AF_INET指定使用IPv4地址,SOCK_STREAM指定使用TCP协议。
  4. 绑定地址和端口server_socket.bind(('127.0.0.1', 12345)),将服务器套接字绑定到本地回环地址127.0.0.1和端口12345
  5. 监听连接server_socket.listen(1),开始监听客户端连接,参数1表示最多允许1个未接受的连接在队列中。
  6. 接受客户端连接并处理数据
    • client_socket, client_address = server_socket.accept(),接受客户端连接,返回新的客户端套接字和客户端地址。
    • data = client_socket.recv(1024).decode('utf-8'),接收客户端发送的数据,1024表示接收缓冲区大小,然后使用decode('utf-8')将字节数据解码为字符串。
    • reversed_data = reverse_string(data),调用reverse_string函数将接收到的字符串反转。
    • client_socket.send(reversed_data.encode('utf-8')),将反转后的字符串编码为字节数据并发送回客户端。
    • client_socket.close(),关闭客户端套接字。

客户端代码

import socket


client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('127.0.0.1', 12345))
message = "Hello, Server!"
client_socket.send(message.encode('utf-8'))
data = client_socket.recv(1024).decode('utf-8')
print(f'从服务器接收到: {data}')
client_socket.close()

代码解释

  1. 导入socket模块import socket,用于网络编程。
  2. 创建客户端套接字client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM),同样使用IPv4和TCP协议。
  3. 连接服务器client_socket.connect(('127.0.0.1', 12345)),连接到服务器的地址和端口。
  4. 发送数据并接收响应
    • message = "Hello, Server!",定义要发送给服务器的字符串。
    • client_socket.send(message.encode('utf-8')),将字符串编码为字节数据并发送给服务器。
    • data = client_socket.recv(1024).decode('utf-8'),接收服务器返回的数据,解码为字符串。
    • print(f'从服务器接收到: {data}'),打印接收到的数据。
  5. 关闭客户端套接字client_socket.close(),关闭客户端套接字。