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

导入client.py中的变量为何会触发未调用的客户端连接报错?

问题根因

  • Python导入任意模块时,都会自动执行该模块顶层全局作用域的所有可执行代码。你client.py中的socket初始化、连接逻辑都写在全局作用域,没有做入口判断,所以当你在服务端执行from client import text时,Python会直接运行client.py里的连接代码,此时你的服务端大概率还没完成端口监听,自然会触发连接超时的报错。
  • 额外需要注意:你试图通过导入模块的方式获取客户端运行时的text变量本身就行不通。服务端和客户端是两个完全独立的进程,内存空间相互隔离,导入模块拿到的只是client.py文件中定义的初始值,完全拿不到客户端实际运行时产生的变量值。

修复方案

  1. 首先修改client.py的代码结构,把运行时才需要执行的逻辑放到if __name__ == "__main__"判断块中,避免被导入时执行:
import socket
import sys

# 全局变量、工具函数可以放在这里,被导入时不会触发额外执行
text = "" # 你原来定义的text变量

if __name__ == "__main__":
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    IP = '192.168.68.166'
    PORT = 4444
    try:
        client.connect((IP, PORT))
        username = input("Username: ")
    except socket.error:
        print("Connection timed out, probably host is down")
        client.close()
        sys.exit()
  1. 废弃通过导入模块获取text长度的逻辑,改为客户端发送密文时,先把明文长度、密文一起打包发送给服务端,服务端接收到后先解析长度再做解密截断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 03:27:02