人为地创建连接超时错误

时间:2020-03-06 14:25:21  来源:igfitidea点击:

收到连接超时后,我们的软件中出现了一个错误。这些错误非常少见(通常是当我们的连接被内部网络断开时)。如何人工产生这种效果,以便测试我们的软件?

如果有关系,可以使用CAsyncSocket类以C ++ / MFC编写应用程序。

编辑:

我尝试使用不存在的主机,但收到套接字错误:

WSAEINVAL (10022) Invalid argument

我的下一个尝试是使用亚历山大(Alexander)的建议连接到其他端口,例如81(虽然在我自己的服务器上)。效果很好。与断开的连接完全相同(等待60秒,然后出错)。谢谢!

解决方案

将网络电缆插入没有其他连接/电缆的交换机。那应该工作,恕我直言。

连接到现有主机,但连接到被防火墙阻止的端口,该端口仅丢弃TCP SYN数据包。例如,www.google.com:81.

过去,我使用了两种策略来模拟网络问题。

  • 拔出网线
  • 关闭计算机和"目标"计算机之间的开关(理想情况下,请保持计算机已插入电源的开关处于打开状态,以使计算机保持其"网络连接")
  • 在目标计算机上运行防火墙软件,以静默方式删除接收到的数据

这些想法之一可能会为我们提供一些方法,以人工生成所需的方案

根据已安装/可用的防火墙软件,我们应该能够阻止传出端口,并且取决于防火墙的设置方式,它应该只丢弃连接请求数据包。没有连接请求,没有连接,发生了超时。如果它是在路由器级别实现的,则可能会更好(它们倾向于丢弃数据包而不是发送重置信息,或者类似情况的任何等效信息),但是也肯定会有一个软件包可以解决这一问题。

我遇到了同样的问题。为了测试软件行为,我只是在适当的时间拔下了网络电缆。我想拔出电缆之前必须设置一个断点。

如果要再次执行此操作,则将一个开关(一个常闭的瞬时按钮)插入网络电缆中。

如果物理断开连接导致了不同的行为,则可以将计算机连接到便宜的集线器,然后在集线器和主网络之间放置上述的交换机。

-编辑 -
在许多情况下,我们需要网络连接才能工作,直到到达程序中的特定位置为止,然后我们将要使用提供的许多建议之一断开连接。

我们可以尝试连接到某个端口上的知名网站,例如,可能无法从200外部访问该端口。大多数防火墙都在DROP模式下工作,它将为我们模拟超时。

最简单的方法是使用CurrPorts断开连接。

但是,为了对异常处理代码进行单元测试,也许我们应该考虑抽象化网络连接代码,并编写一个存根,模拟或者装饰器,以根据需要抛出异常。这样,我们就可以测试应用程序错误处理逻辑,而不必实际使用网络。

我们可能会安装Microsoft Loopback驱动程序,它将为我们创建一个单独的界面。然后,我们可以将其连接到我们自己的某些服务(我们自己的主机)。然后在"网络连接"中可以禁用/启用此类接口...

尽管尚不完全清楚OP要测试哪一个:尝试连接到不存在的主机/端口与已建立的连接超时之间存在区别。我会选择Rob,等到连接正常后再拉电缆。或者为方便起见,让虚拟机充当测试服务器(具有桥接网络),并在建立连接后立即停用虚拟网络接口。

连接到不可路由的IP地址,例如10.255.255.1.

软件解决方案如何:

在应用程序服务器上安装SSH服务器。然后,使用套接字隧道在应用程序服务器上的本地端口和远程端口之间创建链接。我们可以使用ssh客户端工具来执行此操作。让客户端应用程序连接到映射的本地端口。然后,我们可以随意断开套接字隧道以模拟连接超时。