
Estou trabalhando em um aplicativo C#, manipulando soquetes TCP.
Eu tenho um aplicativo de servidor (Hércules) na máquina remota, tentando manter um soquete aberto.
Eu tenho meu aplicativo na minha máquina, assinando esse soquete aberto.
estou a usarTCPViewer da Microsoftpara acompanhar o que está acontecendo.
Depois de alguns minutos, vejo o soquete passando de um estado estabelecido para um estado de espera e, em seguida, a conexão do soquete cai.
Estive procurando no visualizador de eventos de ambos os computadores o ID do evento 4227 em todos os locais gerais (Logs/Aplicativos do Windows,/Segurança,/Configuração,/Sistema e/Eventos Encaminhados), mas não encontrei nada.
O que devo fazer para saber qual máquina está realmente fechando o soquete TCP e por quê?
Responder1
O que devo fazer para saber qual máquina está realmente fechando o soquete TCP
Para saber qual lado fecha a conexão é necessário fazer uma captura de pacotes. Verhttps://wiki.wireshark.org/TCP-4-times-close.mdcomo é o fechamento de uma conexão no Wireshark. A parte que envia o FIN inicial é aquela que fechou a conexão.
... e porque?
Isso é impossível de dizer apenas olhando para o trânsito. Uma conexão pode ser fechada porque o protocolo da camada de aplicação espera ou permite que isso aconteça. Ele pode ser fechado devido a uma falha no cliente ou no servidor. Pode ser fechado por uma parte por violação do protocolo, ou seja, se o outro lado se comportar de maneira diferente do esperado... Então para descobrir o motivo você precisa entender o protocolo da aplicação, olhar os arquivos de log, verificar se processos estão em execução etc.