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

网络驱动器运行exe遇Socket WinError 10022错误,求排查方案

问题原因及解决方案

核心代码逻辑错误

你的check_port函数完全搞反了Socket的使用场景:

  • bind()、listen()、accept()是服务器端用来监听本地端口、接受客户端连接的操作,而你要做的是客户端检测远程主机的端口可用性,这些操作完全多余且错误。
  • 在客户端Socket上执行bind('',22)会尝试绑定本地22端口,若本地22端口已被占用(比如本机开启了SSH服务),或在网络驱动器的exe运行环境中Socket参数校验更严格,就会抛出WinError 10022无效参数错误。

本地运行未报错的原因

本地.py或打包的exe运行时,可能刚好本地22端口未被占用,或是系统对Socket参数的校验宽松,暂时没触发错误,但代码逻辑本身是错误的——哪怕本地没报错,也无法正确检测远程端口(因为你在做服务器监听,根本没去连接远程主机)。

修正后的代码

把check_port函数改成正确的客户端端口检测逻辑:

import socket
import logging
import traceback
from xml.dom import minidom

file = minidom.parse('Sessions.XML')
sessiondata_all = file.getElementsByTagName('SessionData')
failed_ips = []

def check_port(host, port):
    target_port = int(port)
    # 创建客户端Socket,无需bind、listen操作
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        # 设置超时,避免单个不可达主机拖慢整体检测
        sock.settimeout(3)
        # connect_ex返回0表示连接成功,非0表示连接失败
        if sock.connect_ex((host, target_port)) != 0:
            failed_ips.append(host)

def main():
    try:
        for sessiondata in sessiondata_all:
            host = sessiondata.attributes['Host'].value
            port = sessiondata.attributes['Port'].value
            print(f"{host}:{port}")
            check_port(host, port)
    except Exception as e:
        logging.error(traceback.format_exc())
    print(failed_ips)

if __name__ == '__main__':
    main()

额外说明

网络驱动器上的exe运行报错,本质是错误的Socket操作在更严格的环境下触发了参数校验失败,修正逻辑后即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:26:05