Cómo probar el manejo de fallas de conexión del programa Windows .NET TCP

He escrito mi propio módulo de comunicaciones C# TCP (usando SocketAsyncEventArgs, aunque presumiblemente eso es irrelevante). Mi módulo se ejecuta en ambos extremos de la conexión, cliente y servidor. Como parte de la programación, se supone que detecta cuándo falla la conexión y luego intenta restablecerla automáticamente.

Me gustaría escuchar una idea sobre cómo probar esto. Una solución es ejecutarlo en dos máquinas físicas y desconectar el cable de red por un tiempo y luego volver a conectarlo. Esto no está muy automatizado.

Me pregunto si hay algún tipo de programa de enlace WinSock que se pueda usar para simular fallas de conexión. ¿O alguna otra sugerencia?

¡Bienvenido a Recomendaciones de software! Tenga en cuenta que este sitio se trata de recomendar software, no activos como procedimientos, manuales, contenido multimedia , por lo que la parte "Me gustaría escuchar una idea sobre cómo probar esto" está fuera de tema aquí. Consulte también con ¿Qué se requiere para que una pregunta contenga "suficiente información"? para ver si puede editar y mejorar su pregunta para obtener mejores resultados: cuanto mejor describa lo que necesita, mejores respuestas pueden coincidir con eso :)

Respuestas (2)

Los estados de TCP son bien conocidos, pero no se sabe cómo se manejan en diferentes clientes o servidores....

TCP automáticamente intenta volver a intentarlo hasta una cierta cantidad de tiempo antes de que se agote el tiempo de espera, envía las respuestas adecuadas y limpia los recursos. Esto es solo en un lado por el cual la pila tiene control. Depende del otro lado determinar si se debe cerrar un socket (sesión) en particular.

Hay cosas que puedes probar sabiendo esta información... Un lado inicia una sesión y no hace nada... (¿Cuándo enviará el otro lado el RST o FIN?). Un lado comienza y hace algo pero no termina (¿Cuándo cerrará el otro lado?) Un lado comienza y hace algo mal, tal vez envía una respuesta que no se esperaba (nuevamente una prueba para ver si el otro lado se recupera). ..

Saber si una aplicación en particular está o no en sesión depende de la aplicación bajo prueba. Por ejemplo: FTP siempre tiene dos sockets, uno para control y otro para transferencia de datos. FTP Permanece leído para transacciones de datos adicionales siempre que la sesión de control no esté cerrada.

Hay dos formas de detectar si una aplicación (en la red) está funcionando. Uno se llama Port Ping. Todo lo que hace es intentar abrir un socket a la IP/Puerto (Socket). Si se abre, ¡la aplicación está escuchando! La otra es abrir y luego enviar datos para ver si la aplicación es capaz de recibir contenido. A partir de ahí, tiene cualquier cantidad de permutaciones que puede soñar para "probar realmente" esta cosa.

Entonces, para probar lo que pediste automáticamente. Tienes que pensar como un probador... Empieza primero con ambos lados arriba y funcionando (prueba de día soleado). Después de que pase la primera prueba, ejecute la segunda prueba, que solo abre la conexión y no hace nada más... ¿Cuánto falta para que se agote el tiempo de espera del otro lado? Ahora abra la conexión, envíe datos para la tercera prueba, pero no la complete correctamente, ¿simplemente deje de enviar datos sin cerrar? ¿Lo que sucede? Ahora intente abrir una conexión cuando el otro lado no esté escuchando... Ahora intente bombardear al otro lado con demasiados clientes y datos...

Es divertido, pero requiere mucho esfuerzo de programación.

Gracias, usted presenta algunas ideas interesantes.

No creo que necesites comprar software para esto. Agregue un subproceso separado en su código con acceso al objeto Socket y simplemente cierre el socket al azar en algún momento durante la ventana de prueba. Tal vez pase por el escenario de prueba varias veces para que se desconecte en diferentes puntos. La excepción lanzada puede ser diferente a la multitud de excepciones que se lanzarían durante los distintos tipos de desconexiones de socket reales, pero a menos que esté buscando excepciones específicas, debería ser suficiente para probar el código.

Gracias por responder. Simplemente cerrar el zócalo podría ser factible, tendré que pensarlo