我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?
如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。
编辑:
我尝试使用一个不存在的主机,我得到套接字错误:
无效的参数
我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!
我在我们的软件中有一个错误,当我收到连接超时时发生。这些错误是非常罕见的(通常是当我的连接被我们的内部网络丢弃时)。我怎样才能人为地产生这种效果来测试我们的软件呢?
如果重要,应用程序是用c++ /MFC编写的,使用CAsyncSocket类。
编辑:
我尝试使用一个不存在的主机,我得到套接字错误:
无效的参数
我的下一个尝试是使用Alexander的建议,连接到不同的端口,例如81(在我自己的服务器上)。这很有效。与断开连接完全相同(等待60秒,然后出错)。谢谢你!
当前回答
软件解决方案怎么样:
在应用服务器上安装SSH服务器。然后,使用套接字隧道在您的本地端口和应用服务器上的远程端口之间创建一条链路。您可以使用ssh客户端工具来实现这一点。让您的客户端应用程序连接到映射的本地端口。然后,您可以随意打破套接字隧道来模拟连接超时。
其他回答
最简单的方法是使用CurrPorts删除连接。
然而,为了单元测试你的异常处理代码,也许你应该考虑抽象你的网络连接代码,并编写一个存根、mock或decorator来按需抛出异常。然后,您将能够测试应用程序错误处理逻辑,而不必实际使用网络。
对我来说,最简单的方法是根据目的网络在办公路由器上添加静态路由。只是将流量路由到一些没有响应的主机(例如您的计算机),您将得到请求超时。
对我来说最好的事情是静态路由可以通过web界面管理,并且很容易启用/禁用。
Depending on what firewall software you have installed/available, you should be able to block the outgoing port and depending on how your firewall is setup it should just drop the connection request packet. No connection request, no connection, timeout ensues. This would probably work better if it was implemented at a router level (they tend to drop packets instead of sending resets, or whatever the equivalent is for the situation) but there's bound to be a software package that'd do the trick too.
您可以安装Microsoft Loopback驱动程序,它将为您创建一个单独的接口。然后,您可以在它上连接到您的某些服务(您自己的主机)。然后在网络连接中,你可以禁用/启用这样的接口…
如果您想使用活动连接,您还可以使用http://httpbin.org/delay/#,其中#是您希望服务器在发送响应之前等待的时间。只要你的超时时间比延迟时间短……应该是模拟效果。我已经成功地将它与python请求包一起使用。
如果你要发送任何敏感的东西,你可能需要修改你的请求——不知道发送给他们的数据会发生什么。