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

Python3 Socket文件接收脚本适配求助:原Python2.7代码无法运行

修复Python 3下的Socket文件接收脚本

嘿,我帮你定位到问题啦!你的脚本在Python 3里失效,核心原因是Python 3对字节和字符串做了严格区分,再加上几个语法细节的变化,导致程序无法正常终止或接收数据。下面是具体的修复方案:

问题根源

  1. 类型不匹配:Python 2中socket.recv()返回的是字符串,但Python 3里它返回的是bytes对象。你原来用t == ""判断是否接收完毕,可空字符串和空bytes完全不是一回事,这就导致循环永远停不下来,程序会一直挂着等数据。
  2. 套接字关闭错误:你在循环里直接关了监听用的s套接字,其实应该先关和客户端通信的conn,不然会造成资源泄漏。
  3. Print语法变化:Python 3里print是个函数,必须加括号才行,Python 2里的写法在3里会报错。

修复后的完整代码

import socket

(HOST, PORT) = ('', 19129)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()

print(f"已连接客户端: {addr}")  # 加个提示,方便确认连接状态

with open('LightData.txt', 'wb') as f:
    while True:
        t = conn.recv(20)
        print(t)
        if not t:  # 空bytes对象在布尔判断里是False,这样写更简洁
            conn.close()  # 先关掉和客户端的连接
            break
        f.write(t)

s.close()  # 最后再关闭监听套接字

关键改动说明

  • 字节判断优化:用if not t代替原来的t == "",既符合Python 3的类型规则,写法也更简洁直观。
  • 调整关闭顺序:先关闭客户端连接conn,再关闭监听的s,避免不必要的资源占用。
  • 修正Print语法:给print加上括号,适配Python 3的语法要求。
  • 新增连接提示:帮你快速确认是否和客户端成功建立连接,调试起来更方便。

这样修改后,你的脚本就能在Python 3环境下正常接收文件啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:26:10