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

使用Unetstack向远程调制解调器发送文件失败问题排查

问题排查与解决建议

以下是导致脚本超时无响应的核心问题及对应解决方法:

  • 混淆文件路径归属:RemoteFilePutReq的filename参数指向本地Unet网关节点上的文件路径,而非运行Python脚本的本地电脑文件。若文件在本地电脑,需先上传到网关再发起远程传输:

    # 先把本地文件上传到网关
    with open(file_name, 'rb') as f:
        file_data = f.read()
    put_req = FilePutReq(filename=file_name, data=file_data)
    put_resp = gw.request(put_req, 5000)
    if not (put_resp and put_resp.success):
        print("文件上传到网关失败")
        sys.exit(1)
    
  • 超时时间设置过短:水下通信带宽有限,文件传输所需时间远长于普通指令。将timeout参数调整为更大的值,比如60000(60秒),根据文件大小和链路带宽灵活调整。

  • 链路连通性问题:先验证本地网关与远程节点的基础连通性,发送Ping请求测试:

    ping_resp = gw.request(PingReq(to=node), 5000)
    if ping_resp is None:
        print("本地网关与远程节点链路不通,请排查节点通信范围或路由配置")
        sys.exit(1)
    
  • 远程文件传输服务未启用:确认网关节点上的RemoteFileTransferService已启动,可通过以下代码检查:

    rfts = gw.agentForService("RemoteFileTransferService")
    if rfts is None:
        print("网关节点未启用RemoteFileTransferService,请先启用该服务")
        sys.exit(1)
    
  • 目标节点地址格式错误:若远程节点ID并非整数类型(部分设备使用字符串地址),脚本中int(sys.argv[3])的转换会导致地址不匹配,需根据实际节点ID格式调整参数类型。

修正后的完整脚本示例

from unetpy import *
import sys

if len(sys.argv) != 6:
    print("Usage: python3 ac_sender.py <source_ip_address> <port> <destination_address> <timeout(ms)> <filename>")
    sys.exit(1)

ip_address = sys.argv[1]
port = int(sys.argv[2])
node = sys.argv[3]  # 若节点ID是字符串则无需转int
timeout = int(sys.argv[4])
file_name = sys.argv[5]

sock = UnetSocket(ip_address, port)
gw = sock.getGateway()

# 检查远程文件传输服务是否可用
rfts = gw.agentForService("RemoteFileTransferService")
if rfts is None:
    print("错误:网关未启用RemoteFileTransferService")
    sock.close()
    sys.exit(1)

# 测试链路连通性
ping_resp = gw.request(PingReq(to=node), 5000)
if ping_resp is None:
    print("错误:无法连接到目标节点,请排查链路")
    sock.close()
    sys.exit(1)

# 上传本地文件到网关
try:
    with open(file_name, 'rb') as f:
        file_data = f.read()
except FileNotFoundError:
    print(f"错误:本地文件 {file_name} 不存在")
    sock.close()
    sys.exit(1)

put_req = FilePutReq(filename=file_name, data=file_data)
put_resp = gw.request(put_req, 5000)
if not (put_resp and put_resp.success):
    print("错误:文件上传到网关失败")
    sock.close()
    sys.exit(1)

# 发起远程文件传输
req = RemoteFilePutReq(to=node, filename=file_name)
resp = gw.request(req, timeout)
print(f"传输结果: {resp}")

sock.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 18:50:15