You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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()

关键修正说明:

  1. 将HOST和PORT定义在全局作用域,确保bind()方法能正确读取这两个变量,符合任务中“定义全局变量”的要求。
  2. 修正bind()的参数:使用变量HOST而非字符串'HOST',组成符合IPv4要求的元组(HOST, PORT)。
  3. 移除了无用的函数f(),并修复了语法错误;同时添加了数据解码、连接提示和关闭套接字的逻辑,让代码更完整易用。

内容的提问来源于stack exchange,提问作者Lory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 02:05:26