MST

星途 面试题库

面试题:Python套接字通信之基本实现

请使用Python的socket模块编写一个简单的客户端和服务器端程序,实现客户端向服务器端发送一条文本消息,服务器端接收并打印该消息。描述你在编写过程中对套接字创建、绑定、监听、连接和数据收发等步骤的理解。
33.8万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

服务器端代码

import socket

# 创建套接字对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 理解:AF_INET 表示使用 IPv4 协议,SOCK_STREAM 表示使用 TCP 协议

# 获取本地主机名
host = socket.gethostname()
port = 9999

# 绑定地址(主机名、端口号)到套接字
server_socket.bind((host, port))

# 理解:bind 方法将套接字与特定的地址和端口关联,使得服务器可以在该地址和端口上监听连接请求

# 开始监听,最大连接数为5
server_socket.listen(5)

# 理解:listen 方法使服务器进入监听状态,参数指定了等待连接队列的最大长度

print('服务器已启动,等待客户端连接...')

while True:
    # 接受客户端连接
    client_socket, addr = server_socket.accept()
    # 理解:accept 方法阻塞程序执行,直到有客户端连接过来,返回一个新的套接字对象(用于与客户端通信)和客户端的地址

    print('连接来自:', addr)

    # 接收客户端发送的数据
    data = client_socket.recv(1024)
    # 理解:recv 方法从套接字接收数据,参数指定了接收数据的最大长度

    print('接收到的消息:', data.decode('utf-8'))

    # 关闭与客户端的连接
    client_socket.close()

客户端代码

import socket

# 创建套接字对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 获取本地主机名
host = socket.gethostname()
port = 9999

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

# 理解:connect 方法用于客户端连接到指定的服务器地址和端口

message = 'Hello, Server!'
# 发送消息到服务器
client_socket.send(message.encode('utf-8'))
# 理解:send 方法将数据发送到已连接的套接字,数据需要编码为字节流

# 关闭套接字
client_socket.close()

对各步骤的理解

  1. 套接字创建:使用 socket.socket() 创建套接字对象,通过参数指定使用的地址族(如 AF_INET 表示 IPv4)和套接字类型(如 SOCK_STREAM 表示 TCP 流套接字)。这是网络通信的基础,它为程序提供了一个通信端点。
  2. 绑定:服务器端使用 bind() 方法将套接字绑定到一个特定的地址和端口。这个地址和端口就是服务器监听客户端连接的地方。绑定操作将套接字与网络中的特定位置关联起来。
  3. 监听:服务器通过 listen() 方法进入监听状态,等待客户端的连接请求。参数指定了等待连接队列的最大长度,超过这个长度的连接请求可能会被拒绝。监听使得服务器随时准备接受客户端的连接。
  4. 连接:客户端使用 connect() 方法连接到服务器的指定地址和端口。这个操作在客户端和服务器之间建立起一条通信链路,一旦连接成功,双方就可以开始交换数据。
  5. 数据收发:连接建立后,客户端使用 send() 方法将数据发送到服务器,服务器使用 recv() 方法接收客户端发送的数据。发送的数据需要编码为字节流,接收后的数据可能需要解码为原始格式。数据收发是实现应用层功能(如消息传递)的关键步骤。