Pregunta

He tenido un error en el software que se produce cuando recibo un tiempo de espera de conexión.Estos errores son muy raros (por lo general, cuando mi conexión se cae por nuestra red interna).¿Cómo puedo generar este tipo de efecto artificialmente para que yo pueda probar nuestro software?

Si lo que importa es la aplicación está escrita en C++/MFC mediante CAsyncSocket clases.

Editar:

He intentado usar un inexistente host, y me da el error de socket:

WSAEINVAL (10022) argumento no Válido

Mi siguiente intento fue el uso de Alexandersugerencia de conexión a un puerto diferente, por ejemplo,81 (en mi propio servidor, sin embargo).Que gran trabajo.Exactamente de la misma como una interrupción en la conexión (60 segundos de espera, entonces el error).Gracias!

¿Fue útil?

Solución

Conectarse a un host existente, pero a un puerto que está bloqueado por el firewall que simplemente elimina los paquetes SYN TCP.Por ejemplo, www.google.com:81.

Otros consejos

Conectarse a una dirección IP no enrutable, tales como 10.255.255.1.

Si usted está en una máquina unix, puede iniciar un puerto de escucha utilizando netcat:

nc -l 8099

A continuación, modificar el servicio para llamar a lo que normalmente se hace para que el puerto por ejemplo, http://localhost:8099/some/sort/of/endpoint

Entonces, el servicio se abra la conexión y la escritura de datos, pero nunca tendrá una respuesta, y así le dará una Lectura de Tiempo de espera (en lugar de Connection Refused)

La dirección URL siguiente siempre se da un tiempo de espera, y combina lo mejor de @Alexander y @Uem respuestas anteriores:

http://example.com:81

El uso de example.com:81 es una mejora sobre Alexander respuesta del porque example.com está reservado por el estándar DNS, por lo que siempre será inalcanzable, a diferencia de google.com:81, que puede cambiar si Google se siente como él.También, porque example.com se define a ser inalcanzable, usted no será inundaciones en los servidores de Google.

Yo diría que es una mejora con respecto a @uem la respuesta de porque es mucho más fácil de recordar.

Usted puede utilizar el Python REPL para simular un tiempo de espera mientras se reciben los datos (es decir,después de que una conexión se ha establecido correctamente).Nada sino un estándar de Python para la instalación es necesario.

Python 2.7.4 (default, Apr  6 2013, 19:54:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)        
>>> s.bind(('localhost', 9000))
>>> s.listen(0)
>>> (clientsocket, address) = s.accept()

Ahora espera por una conexión entrante.Conectar lo que quieras para probar a localhost:9000.Cuando lo haga, Python aceptar la conexión y accept() la devolverá.A menos que usted envía los datos a través de la clientsocket, el autor de la toma debe de tiempo de espera durante el próximo recv().

  • 10.0.0.0
  • 10.255.255.255
  • 172.16.0.0
  • 172.31.255.255
  • 192.168.0.0
  • 192.168.255.255

Todos estos no son enrutables.

Me gustaría destacar la atención de todos a pathod

Con una config (tomado de sus ejemplos) de 200:b@100:dr usted obtendrá una conexión que aleatoriamente gotas.

Cómo sobre una solución de software:

Instalar un servidor SSH en el servidor de aplicaciones.A continuación, utilice el zócalo de túnel para crear un vínculo entre el puerto local y el puerto remoto en el servidor de aplicaciones.Puede usar ssh cliente herramientas para hacerlo.Tiene su aplicación de cliente se conecte a su local asignada lugar el puerto.A continuación, puede romper el zócalo de túnel para simular el tiempo de espera de conexión.

Si desea utilizar una conexión activa también puede utilizar http://httpbin.org/delay/#, donde # es el tiempo que desea que su servidor para que espere antes de enviar una respuesta.Tan largo como el tiempo de espera es más corto que el retraso ...debe simular el efecto.He utilizado con éxito con el python solicitudes de paquete.

Puede que desee modificar su solicitud si usted está enviando algo sensible - ni idea de lo que pasa con los datos enviados a ellos.

Hay servicios disponibles que permiten crear artificialmente origen de tiempos de espera por llamar a una API donde se especifique el tiempo que el servidor va a tomar para responder.Tiempo de espera del servidor en macgyver es un ejemplo de este tipo de servicio.

Por ejemplo, si quería probar una solicitud que tarda 15 segundos para responder basta con hacer una petición post a la macgyver de la API.

JSON Carga:

{
    "timeout_length": 15000
}

La API de Respuesta (Después de 15 segundos):

{
    "response": "ok"
}

Tiempo de espera del servidor programa de macgyver
https://askmacgyver.com/explore/program/server-timeout/3U4s6g6u

Usted puede instalar de Bucle invertido de Microsoft controlador que se va a crear una interfaz para usted.A continuación, puede conectar en él a algunos servicios de la suya (su propio host).A continuación, en Conexiones de Red, puede activar/desactivar esa interfaz...

A pesar de que no está totalmente claro que uno de los OP quiere probar:hay una diferencia entre intentar una conexión a un inexistente host/puerto y un tiempo de espera de una conexión ya establecida.Me gustaría ir con Rob y espere hasta que la conexión está funcionando y, a continuación, tire del cable.O - por conveniencia - tener una máquina virtual de trabajo como el servidor de prueba (con bridged networking) y la desactivación de la interfaz de red virtual una vez establecida la conexión.

La técnica que se utiliza con frecuencia para simular un azar del tiempo de espera de conexión es el uso de ssh reenvío de puerto local.

ssh -L 12345:realserver.com:80 localhost

Esto reenviará el tráfico en localhost:12345 a realserver.com:80 Puede recorrer en este todo en su propio local de la máquina, si usted desea:

ssh -L 12345:localhost:8080 localhost

Así que usted puede apuntar su aplicación en localhost y puerto personalizado, y el tráfico se enruta al host de destino:puerto.A continuación, puede salir de este shell (puede que también necesite ctrl+c el shell después de salir) y matará el reenvío que hace que tu aplicación para ver la pérdida de la conexión.

Enchufe el cable de red a un switch que no tiene ninguna otra conexión de los cables.Que deben trabajar en mi humilde opinión.

Hay un par de tácticas que he usado en el pasado para simular problemas de redes;

  1. Saque el cable de red
  2. Apague el interruptor (idealmente con el conmutador de que el equipo está enchufado aún siendo alimentado por lo que la máquina mantiene la "conexión de red") entre su máquina y el "destino" de la máquina
  3. Ejecute el software de firewall en el equipo de destino que silenciosamente gotas de datos recibidos

Una de estas ideas podría dar algunos medios de artifically generar el escenario que usted necesita

Dependiendo de lo que el firewall de software que ha instalado y disponible, usted debe ser capaz de bloquear el puerto saliente y dependiendo de cómo su firewall el programa de instalación sólo debe soltar la conexión de paquete de solicitud.Sin solicitud de conexión, sin conexión, tiempo de espera se produce.Esto probablemente funcionaría mejor si se implementa en un router de nivel (que tienden a descartar los paquetes en lugar de enviar restablece, o lo que es equivalente a la situación), pero no hay límites para ser un paquete de software que haría el truco también.

Lo más fácil sería dejar a su conexión mediante CurrPorts.

Sin embargo, en orden a la unidad de prueba de su código de control de excepciones, tal vez usted debería considerar la posibilidad de la abstracción de su conexión de red de código, y escribir un código auxiliar, burlarse o decorador que lanza excepciones en la demanda.Usted será capaz de probar la aplicación lógica de control de errores sin tener necesidad de utilizar la red.

He tenido problemas a lo largo de las mismas líneas que hacer.Para probar el comportamiento del software, acabo de desenchufar el cable de red en el momento adecuado.Tuve que establecer un punto de ruptura justo antes de que me quería desenchufe el cable.

Si yo fuera a hacer de nuevo, me gustaría poner un interruptor (normalmente cerrado botón pulsador momentáneo de uno) en un cable de red.

Si la física de desconexión provoca un comportamiento diferente, puedes conectar tu ordenador a un hoteles de centro y ponga el interruptor que he mencionado anteriormente entre el centro y la red principal.

-- EDIT -- En muchos casos, es necesario la conexión a la red de trabajo hasta llegar a un cierto punto en su programa, ENTONCES usted quiere desconectar con una de las muchas sugerencias ofrecidas.

Para mí la forma más sencilla fue la adición de ruta estática en la oficina del router basada en la red de destino.Sólo enrutar el tráfico a algunos de responder de host (por ejemplo,el equipo) y obtendrá solicitud de tiempo de espera.

Lo mejor para mí era que la ruta estática puede ser gestionado a través de la interfaz web y habilitado/deshabilitado fácilmente.

Un montón de buenas respuestas, pero la solución más limpia que parece ser este servicio

http://httpstat.us/504?sleep=60000

Usted puede configurar la duración del tiempo de espera (hasta 230 segundos) y la eventual código de retorno.

Usted puede intentar conectarse a uno de los conocidos sitios Web en un puerto que puede no estar disponible desde el exterior - 200, por ejemplo.La mayoría de los firewalls en la GOTA de modo y simula un tiempo de espera para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top