我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?

如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。

编辑:

我尝试使用一个不存在的主机,我得到套接字错误:

无效的参数

我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!


当前回答

下面的URL总是给出一个超时,并结合了@Alexander和@Emu上面最好的答案:

http://example.com:81

使用example.com:81是对Alexander的答案的改进,因为example.com是由DNS标准保留的,因此它将始终不可访问,不像google.com:81,如果谷歌感觉像它,它可能会改变。此外,由于example.com被定义为不可访问,因此不会使谷歌的服务器超载。

我想说这比@emu的答案有进步,因为它更容易记住。

其他回答

10.0.0.0 10.255.255.255 172.16.0.0 172.31.255.255 192.168.0.0到 192.168.255.255

所有这些都是不可路由的。

软件解决方案怎么样:

在应用服务器上安装SSH服务器。然后,使用套接字隧道在您的本地端口和应用服务器上的远程端口之间创建一条链路。您可以使用ssh客户端工具来实现这一点。让您的客户端应用程序连接到映射的本地端口。然后,您可以随意打破套接字隧道来模拟连接超时。

下面的URL总是给出一个超时,并结合了@Alexander和@Emu上面最好的答案:

http://example.com:81

使用example.com:81是对Alexander的答案的改进,因为example.com是由DNS标准保留的,因此它将始终不可访问,不像google.com:81,如果谷歌感觉像它,它可能会改变。此外,由于example.com被定义为不可访问,因此不会使谷歌的服务器超载。

我想说这比@emu的答案有进步,因为它更容易记住。

您可以安装Microsoft Loopback驱动程序,它将为您创建一个单独的接口。然后,您可以在它上连接到您的某些服务(您自己的主机)。然后在网络连接中,你可以禁用/启用这样的接口…

我过去曾使用过一些策略来模拟网络问题;

拔出网线 关闭你的机器和“目标”机器之间的开关(理想情况下,计算机插入的开关仍在供电,以便机器保持“网络连接”) 在目标计算机上运行防火墙软件,以静默方式丢弃接收到的数据

其中一个想法可能会为您提供一些人为生成所需场景的方法