Pergunta

Eu tenho uma porta de escuta no meu servidor à qual estou me conectando usando uma classe Java e o Socket interface, ou seja,

Socket mySocket = new Socket(host,port);

Eu então pego um OutputStream, decore com um PrintWriter no modo autoflush e estou rindo - exceto se a porta de escuta fechar.Então eu recebo

tcp4       0      0  *.9999                 *.*                    LISTEN
tcp        0      0  127.0.0.1.45737        127.0.0.1.9999         CLOSE_WAIT

e não consigo detectar o problema no programa - tentei usar o isConnected() método no soquete, mas parece não saber que a conexão está fechada.

Quero estar ciente do problema na próxima vez que tentar escrever no Socket para poder tentar reconectar e relatar o problema.

Algum conselho, por favor?

Obrigado a todos

Foi útil?

Solução

Definir um tempo limite curto?

Faz isOutputShutdown() não conseguir o que você quer?

Você sempre pode construir um SocketWatcher classe que gira por conta própria Thread e tenta repetidamente escrever strings vazias no Socket até que isso levante um SocketClosedException.

Outras dicas

A única maneira confiável de detectar uma conexão interrompida no TCP é gravá-la, o que eventualmente causará uma IOException de 'redefinição de conexão'.No entanto, devido ao buffer, isso não acontecerá na primeira gravação após a desconexão,p mas em uma gravação subsequente.Você não pode fazer nada sobre isso.

Defina um thread diferente para leitura do soquete.Ele será bloqueado até que o soquete seja fechado e então uma exceção será lançada.Capture essa exceção para detectar o fechamento imediatamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top