Python Socket编程:如何获取并回传客户端端口号?
获取客户端端口并回传的Python实现方法
嘿,这个问题其实挺常见的,我来给你拆解下两种最常用的网络通信场景——TCP和UDP的实现方案,都是用Python标准库socket就能轻松搞定的:
1. TCP 场景实现
TCP是面向连接的协议,服务端在和客户端建立连接后,可以直接从连接对象中获取客户端的地址(包含IP和端口),然后把端口号回传给客户端。
服务端代码
import socket # 创建TCP socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址和端口 server_socket.bind(('0.0.0.0', 12345)) # 监听连接 server_socket.listen(5) print("服务端已启动,等待客户端连接...") while True: # 接受客户端连接,conn是连接对象,addr是客户端地址元组(IP, 端口) conn, addr = server_socket.accept() client_ip, client_port = addr print(f"客户端 {client_ip}:{client_port} 已连接") # 将客户端端口号转为字符串并发送 conn.send(f"你的客户端端口是: {client_port}".encode('utf-8')) # 关闭连接 conn.close()
客户端代码
import socket # 创建TCP socket对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 连接服务端 client_socket.connect(('127.0.0.1', 12345)) # 接收服务端回传的信息 response = client_socket.recv(1024).decode('utf-8') print(response) # 关闭连接 client_socket.close()
2. UDP 场景实现
UDP是无连接的协议,服务端每次接收数据时,都会同时获取到客户端的地址信息,直接提取端口号回传即可。
服务端代码
import socket # 创建UDP socket对象 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定地址和端口 server_socket.bind(('0.0.0.0', 12345)) print("UDP服务端已启动,等待客户端数据...") while True: # 接收客户端数据和地址 data, addr = server_socket.recvfrom(1024) client_ip, client_port = addr print(f"收到来自 {client_ip}:{client_port} 的数据: {data.decode('utf-8')}") # 回传客户端端口号 server_socket.sendto(f"你的客户端端口是: {client_port}".encode('utf-8'), addr)
客户端代码
import socket # 创建UDP socket对象 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 发送数据到服务端 client_socket.sendto("请求获取我的端口号".encode('utf-8'), ('127.0.0.1', 12345)) # 接收服务端回传的信息 response, _ = client_socket.recvfrom(1024) print(response.decode('utf-8')) # 关闭socket client_socket.close()
一些额外说明
- 如果你在客户端代码里手动绑定了固定端口(比如
client_socket.bind(('0.0.0.0', 6789))),那服务端获取到的就是你指定的这个端口;如果没有绑定,系统会自动分配一个随机端口。 - 代码里用了
utf-8编码来处理字符串和字节的转换,避免乱码问题,实际使用时可以根据需求调整。
内容的提问来源于stack exchange,提问作者user9181771
相关产品推荐
相关产品推荐

