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

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

编辑:

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

无效的参数

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


当前回答

如果您想使用活动连接,您还可以使用http://httpbin.org/delay/#,其中#是您希望服务器在发送响应之前等待的时间。只要你的超时时间比延迟时间短……应该是模拟效果。我已经成功地将它与python请求包一起使用。

如果你要发送任何敏感的东西,你可能需要修改你的请求——不知道发送给他们的数据会发生什么。

其他回答

尽管还不完全清楚OP想要测试哪一个:尝试连接到不存在的主机/端口和超时已经建立的连接之间是有区别的。我会和罗布一起去,等连接好了再拉电缆。或者——为了方便起见——让虚拟机作为测试服务器(使用桥接网络),一旦建立连接,就取消激活虚拟网络接口。

我经常用来模拟随机连接超时的技术是使用ssh本地端口转发。

ssh -L 12345:realserver.com:80 localhost

这将把localhost:12345上的流量转发到realserver.com:80 如果你想,你也可以在你自己的本地机器上循环这个:

ssh -L 12345:localhost:8080 localhost

因此,您可以将应用程序指向本地主机和自定义端口,并且流量将被路由到目标主机:端口。然后你可以退出这个shell(你可能还需要在退出后ctrl+c shell),它会杀死转发,导致你的应用程序看到连接丢失。

10.0.0.0 10.255.255.255 172.16.0.0 172.31.255.255 192.168.0.0到 192.168.255.255

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

您可以尝试在外部端口(例如200)上连接到一个知名的Web站点。大多数防火墙都在DROP模式下工作,它会为你模拟超时。

请连接不可路由的IP地址,如10.255.255.1。