MST
星途 面试题库

面试题:Python在分布式系统网络编程中如何实现简单的消息传递

请使用Python的Socket模块,编写一个简单的分布式系统中客户端与服务器之间消息传递的示例代码,要求服务器能接收客户端发送的文本消息并回显。说明其中涉及的网络编程概念,如端口、IP地址等在代码中的作用。
32.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

服务器端代码

import socket


def server():
    # 创建一个TCP套接字
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 获取本地主机名
    host = socket.gethostname()
    port = 9999
    # 绑定IP地址和端口
    server_socket.bind((host, port))
    # 监听,最大连接数为5
    server_socket.listen(5)
    print('服务器已启动,等待客户端连接...')
    while True:
        # 接受客户端连接
        client_socket, addr = server_socket.accept()
        print('接收到来自', addr, '的连接')
        # 接收客户端发送的消息
        data = client_socket.recv(1024).decode('utf-8')
        print('接收到消息:', data)
        # 回显消息给客户端
        client_socket.send(data.encode('utf-8'))
        # 关闭客户端连接
        client_socket.close()


if __name__ == '__main__':
    server()


客户端代码

import socket


def client():
    # 创建一个TCP套接字
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 获取本地主机名
    host = socket.gethostname()
    port = 9999
    # 连接到服务器
    client_socket.connect((host, port))
    message = '你好,服务器!'
    # 发送消息到服务器
    client_socket.send(message.encode('utf-8'))
    # 接收服务器回显的消息
    data = client_socket.recv(1024).decode('utf-8')
    print('接收到服务器回显:', data)
    # 关闭客户端连接
    client_socket.close()


if __name__ == '__main__':
    client()


网络编程概念说明

  1. IP地址:在代码中,socket.gethostname()获取的是本地主机名,在实际网络环境中,这可以替换为服务器的真实IP地址。IP地址用于在网络中唯一标识一台主机,客户端需要知道服务器的IP地址才能建立连接。
  2. 端口:代码中定义了端口号port = 9999。端口是应用程序在主机上的标识,不同的应用程序通过不同的端口号来区分。服务器通过绑定特定的端口(这里是9999)来监听客户端的连接请求,客户端也需要连接到服务器的这个指定端口才能进行通信。
  3. 套接字(Socket)socket.socket(socket.AF_INET, socket.SOCK_STREAM)创建了一个基于IPv4和TCP协议的套接字。套接字是网络通信的端点,它提供了一种抽象,让应用程序可以通过它来进行网络数据的发送和接收。
  4. TCP协议:使用SOCK_STREAM表明采用TCP协议,它是一种面向连接的、可靠的传输协议。在通信前需要先建立连接(如客户端的connect和服务器的accept操作),并且保证数据按顺序、无差错地传输。