Python Socket编程:正确定义全局变量HOST/PORT并传入.bind()方法
修正TCP服务器代码的问题及正确实现
你的代码存在以下几个问题:
- 变量作用域错误:HOST和PORT被定义在函数
f()内部,属于局部变量,外部代码无法访问,导致server_socket.bind()调用时找不到PORT变量;同时你错误地把HOST写成了字符串字面量'HOST',而非引用变量。 - 语法错误:
print(client_socket.recv(1024)) here末尾多了here,会触发语法报错。 - 无效函数定义:你定义了函数
f()但从未调用,就算想通过函数初始化变量,也不会生效。
修正后的完整代码:
import socket # 定义全局变量HOST和PORT,满足任务要求 HOST = '127.0.0.1' # 本地主机的IPv4地址 PORT = 1337 # 选择大于1023的端口,无需root权限 # 创建TCP套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定地址和端口 server_socket.bind((HOST, PORT)) # 开始监听连接 server_socket.listen(1) print(f"服务器已启动,在 {HOST}:{PORT} 等待连接...") while True: # 接受客户端连接 client_socket, addr = server_socket.accept() print(f"客户端 {addr} 已连接") # 接收并打印客户端数据(转成字符串) received_data = client_socket.recv(1024).decode('utf-8') print(f"收到数据: {received_data}") # 关闭客户端套接字,释放资源 client_socket.close()
关键修正说明:
- 将HOST和PORT定义在全局作用域,确保
bind()方法能正确读取这两个变量,符合任务中“定义全局变量”的要求。 - 修正
bind()的参数:使用变量HOST而非字符串'HOST',组成符合IPv4要求的元组(HOST, PORT)。 - 移除了无用的函数
f(),并修复了语法错误;同时添加了数据解码、连接提示和关闭套接字的逻辑,让代码更完整易用。
内容的提问来源于stack exchange,提问作者Lory
相关产品推荐
相关产品推荐

