令人头秃的:你的主机中的软件中止了一个已建立的连接

简介: 令人头秃的:你的主机中的软件中止了一个已建立的连接

网络异常,图片无法展示
|


1. 前言



最近在答疑群中,经常看到同学们遇到 你的主机中的软件中止了一个已建立的连接 这样的报错,这个报错可能的原因还挺多的,本质上是,无法连接服务。


一般来说,我们在poco初始化,或者是poco初始化之后“第一个”控件操作的语句中,就容易出现这个问题。


下面我们详细看下可能导致这个问题的几个常见场景:


2. 游戏应用未接入pocoSDK



如果我们的测试应用并非Android/iOS原生应用,而是游戏应用,那我们在初始化该游戏应用的poco之前,就需要先给游戏应用接入游戏引擎对应的PocoSDK。


成功接入PocoSDK并且应用打包过程无报错之后,我们可以在设备上 安装并启动 该应用,之后使用最新版的AirtestIDE连接该设备,在poco辅助窗选择正确的poco模式,查看能否显示正常的UI树。这个过程可以用来判断我们的游戏包,当前是否已经成功接入了对应的PocoSDK。


未接入pocoSDK的游戏应用,我们在初始化其poco时,将出现下述报错:


ConnectionAbortedError: [WinError 10053] 你的主机中的软件中止了一个已建立的连接。
复制代码


因为此时包内没有挂载poco服务,我们无法与游戏建立通讯。


3. Poco初始化顺序问题



还有一种常见的情况是,我明明已经在游戏包内接入了pocoSDK,并且在IDE也可以正常看到游戏的UI树了,但是跑脚本的时候,却没法正常初始化poco,或者跑到第一个poco语句时,就报错 你的主机中的软件中止了一个已建立的连接 ,通常是因为一些初始化的顺序问题。


其实本质问题是,我们的pocoSDK是接入在游戏内的,所以只有当游戏正常启动,进入到主界面之后,poco服务才会开始起来(通常会把poco服务挂载到根节点,以保证游戏启动后,能尽快建立poco服务)。


所以我们会要求在启动游戏之后,才去查看它的UI树,或者初始化该游戏的poco。


但有时候在写脚本的时候,可能没有关注到这个问题,我们来看这样子的一个示例代码:


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__,devices=["android://127.0.0.1:5037/127.0.0.1:7555"])
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
start_app("com.NetEase")
sleep(1.0)
poco("btn_start").click()
复制代码


看起来没有很大的问题,连接设备、初始化了一个unity poco,启动游戏,点击游戏内的控件,如果这里是Android poco的话,确实没有问题。


但是,我们强调过,游戏的poco服务是在应用里面的,我们这里没有启动游戏,也就意味着还没有启动游戏内的poco服务,此时强行先初始化一个unity poco,结果就之能是收到1个 你的主机中的软件中止了一个已建立的连接 的报错了。


网络异常,图片无法展示
|


那我们把顺序调整下:


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__,devices=["android://127.0.0.1:5037/127.0.0.1:7555"])
start_app("com.NetEase")
sleep(1.0)
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
poco("btn_start").click()
复制代码


这下应该没问题了吧,连接设备、启动游戏应用、初始化游戏poco,最后才进行控件操作,一切看起来都那么完美!


但是,实际运行过程,居然还是有很大概率收到 你的主机中的软件中止了一个已建立的连接 的报错,真是令人头秃!!


其实这里还有一个非常细碎的小细节需要注意下,就是我们使用 start_app 启动游戏应用,大部分游戏,启动到进入主界面时,也就是完全启动游戏,是需要一定时间的,可能是5s,可能是10s,这个跟设备和具体的游戏应用,都有关系,而在游戏没有完全启动时,里面的poco服务也没办法跟着起来,这就导致还有很大的概率出现报错了。


所以我们尽量在 start_app 之后,增加尽可能长一点的 sleep ,以确保游戏完成启动,再来初始化我们的游戏poco,同理,poco初始化语句之后,也可以适当的添加一点sleep,来保证poco初始化成功,再来进行控件操作:


# -*- encoding=utf8 -*-
__author__ = "AirtestProject"
from airtest.core.api import *
auto_setup(__file__,devices=["android://127.0.0.1:5037/127.0.0.1:7555"])
start_app("com.NetEase")
sleep(6.0)
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
sleep(3.0)
poco("btn_start").click()
复制代码


记住正确的顺序:先连接设备(一般在 auto_setup 接口里面连接)--> 再打开应用(一般用 start_app 接口)--> 等应用开启完毕(这里添加足够的 sleep ),最后才初始化 poco 。


4. 初始化远程iOS设备的poco问题



目前,我们仅支持初始化本地连接的iOS设备的poco(查看本地连接iOS设备的UI树),不支持初始化远程连接的iOS的poco。


强行初始化远程iOS设备的poco时,也将无法成功连接上服务。


5. Windows游戏的poco初始化问题



以Windows上的unity游戏为例,当我们在该客户端游戏上成功接入pocoSDK之后,我们支持在该Windows游戏上使用poco。


但是它的初始化脚本,与Android设备的unity poco,又有一些不一样:


# Android设备上的unity poco初始化
from poco.drivers.unity3d import UnityPoco
poco = UnityPoco()
# Windows上的unity poco初始化
dev = connect_device('Windows:///?title_re=^your game title.*$')
addr = ('', 5001)
poco = UnityPoco(addr, device=dev)
复制代码


如果我们在Windows的unity游戏上,使用Android的初始化方式,也会导致无法连接服务,从而产生 你的主机中的软件中止了一个已建立的连接 的报错。


6. 连线不稳定的问题



也有少部分情况是,数据线连线不稳定的问题,导致连接暂时断了一下。如果我们在跑脚本的时候,发现一些不固定位置的偶现断开连接的报错,可以考虑是数据线连线不稳定的问题,请及时更换稳定的数据线,再来进行脚本跑测。


7. 其它问题



除了上述问题以外,可能还有一些别的问题,我们这里没有讲到;同学们在遇到该问题时,优先排除以上几个问题。

相关文章
|
网络安全 KVM 网络虚拟化
变形金刚外传0x03:进一步讨论NSX-T的传输节点就绪
话接上篇,对于NSX-T来说,由于传输节点配置文件将传输区域与主机交换机进行了严格意义上的绑定,因此不会出现在NSX-V场景中传输区域与分布式交换机覆盖不一致的情况。
|
2月前
|
API Windows
揭秘网络通信的魔法:Win32多线程技术如何让服务器化身超级英雄,同时与成千上万客户端对话!
【8月更文挑战第16天】在网络编程中,客户/服务器模型让客户端向服务器发送请求并接收响应。Win32 API支持在Windows上构建此类应用。首先要初始化网络环境并通过`socket`函数创建套接字。服务器需绑定地址和端口,使用`bind`和`listen`函数准备接收连接。对每个客户端调用`accept`函数并在新线程中处理。客户端则通过`connect`建立连接,双方可通过`send`和`recv`交换数据。多线程提升服务器处理能力,确保高效响应。
40 6
|
2月前
|
网络协议 Unix Linux
作为网工,你还只会Wireshark?那你就OUT了!
作为网工,你还只会Wireshark?那你就OUT了!
|
2月前
|
运维 Linux 网络安全
"揭秘Traceroute穿越防火墙的隐形障碍:为何路径追踪在此中断?解锁隐藏的网络回显之谜!"
【8月更文挑战第19天】Traceroute是网络故障排查的关键工具,用于追踪数据包路径。但防火墙常致回显问题,表现为路由节点信息缺失。本文通过案例分析此现象:数据包遇防火墙时,因安全策略拦截ICMP或UDP数据包而显示星号。解决方法包括检查防火墙策略以确保ICMP和UDP端口未被阻止,在Linux中使用ICMP版本的Traceroute(如`traceroute -I`),关闭防火墙接口管理功能,或调整安全策略以限制Traceroute访问。针对具体网络环境灵活运用这些策略可有效解决问题。
74 0
|
安全 Ubuntu KVM
变形金刚外传0x02:从V的主机准备到T的传输节点就绪
本篇我们继续来闲谈VMware出品的“变形金刚”。 最近在和关注公众号的朋友交流过程中,发现不少朋友都有一些疑惑: 想要学习NSX DC,有什么推荐的参考书么? 想要学习NSX-T,是否一定要有NSX-V的基础? 想要自己动手搞一搞NSX,服务器需要多少资源?
|
11月前
|
缓存 网络协议 Linux
网络的救命稻草:重传机制如何确保数据顺利传输?
在网络传输中,数据的可靠性和稳定性一直是一个重要的挑战。幸运的是,重传机制应运而生,为我们解决了这个问题。本文将深入探讨重传机制在网络中的应用和工作原理。我们将介绍TCP中最常见的超时重传和快速重传,以及SACK和D-SACK这两种高级重传机制。了解这些机制如何工作可以帮助我们更好地理解数据传输的可靠性和稳定性的保障。
291 1
网络的救命稻草:重传机制如何确保数据顺利传输?
|
安全 C#
[病毒分析]远程木马创建傀儡进程分析(下)
[病毒分析]远程木马创建傀儡进程分析
193 0
 [病毒分析]远程木马创建傀儡进程分析(下)
|
网络协议 Java
计网 - 一台内存在 8G 左右的服务器,可以同时维护多少个连接?
计网 - 一台内存在 8G 左右的服务器,可以同时维护多少个连接?
128 0
|
Windows
小唐很疑惑?远程桌面客户端和服务器端都设定了允许本地磁盘映射,但看不见本地盘
小唐很疑惑?远程桌面客户端和服务器端都设定了允许本地磁盘映射,但看不见本地盘
195 0
|
安全 API
[病毒分析]远程木马创建傀儡进程分析(中)
[病毒分析]远程木马创建傀儡进程分析
287 0
[病毒分析]远程木马创建傀儡进程分析(中)