¿Por qué mi cliente Socket Connection sigue desconectando

Tengo un progtwig de escritura de aplicación de servidor de cliente en C # .NET utilizando Sockets.

A menudo recibo mensajes de registro (por ejemplo, aproximadamente 4 por hora) diciendo este mensaje,

An existing connection was forcibly closed by the remote host 

En este caso, aquí el error está ocurriendo en el lado del ‘servidor’.

Decidí usar wireshark para analizar lo que está ocurriendo, y entiendo esto. No hay retrasos, todo esto está sucediendo en un par de segundos.

 Server > Client [PSH, ACK] Seq=55653 Ack=4472 Win=63940 Len=148 Client > Server [ACK] Seq=4472 Ack=55801 Win=4038 Len=0 Server > Client [PSH, ACK] Seq=55801 Ack=4472 Win=63940 Len=148 Client > Server [ACK] Seq=4472 Ack=55949 Win=4001 Len=0 Server > Client [PSH, ACK] Seq=55949 Ack=4472 Win=63940 Len=142 Client > Server [PSH, ACK] Seq=4472 Ack=55949 Win=4001 Len=31 Client > Server [RST, ACK] Seq=4503 Ack=55949 Win=0 Len=0 

Así que el cliente y el servidor están enviando cosas entre ellos (PSH) y reconociendo cosas (ACK). De repente, una RST está ocurriendo. Esto de acuerdo con wikipedia es un reinicio, y este reinicio corresponde al mensaje ‘Una conexión existente fue forzada …’ que recibo arriba.

¿Qué significa eso realmente? ¿Esto significa que el reinicio causa el problema? Creo que la respuesta es no, y lo que tendría más sentido es que el restablecimiento sea el resultado del problema. Es decir, el zócalo en el lado del servidor muere por algún motivo, y el cliente envía el restablecimiento al servidor para intentarlo y activarlo.

¿Pensamientos?

A veces, un cliente que se comporta mal recibirá o enviará lo que quiere, y luego se cerrará de inmediato (cerrando el socket y cortando abruptamente la conexión). Es normal ver que ocasionalmente en cualquier servicio que está expuesto a Internet.

Si es su propio código el que está causando esto, asegúrese de enviar cualquier comando “Ya he terminado” (uno común es “SALIR”), y “cerrar” correctamente la conexión antes de cerrarla. Aparte de eso, los únicos reinicios que debería estar causando involucrarían su desconexión de acceso a Internet.

Son tanto el servidor como el cliente su propio código. Incluso me he enfrentado a un problema similar, pero en mi caso el servidor no era mi código, por lo que no pude averiguar por qué el cliente estaba cerrando la conexión y enviando mensajes PSH y RST.

En cualquier caso, si recibe un error como el que recibió, es recomendable crear un nuevo socket y establecer comunicación.