Sobre a solução de desconexão Qt tcpsocket

1 protocolo tcpip

Não há muito a dizer, afirma garantir que a transmissão seja precisa e confiável e que a missão será cumprida. O protocolo é uma grande bagunça e raramente usado em aplicações práticas.

2 O problema

Após utilizar o protocolo tcp para conectar ao servidor (testei o módulo de comunicação do sistema windows e o microcontrolador do sistema ubuntu com o protocolo tcpip), descobri que o feedback não poderia ser oportuno ou que a rede estava desconectada; (era o mesmo na mesma LAN e na rede pública. A princípio me perguntei se poderia haver algum problema com o driver da placa de rede do sistema Ubuntu, mas depois descobri que o mesmo acontecia com o sistema Windows, que estava conectado via Wi-fi). No final, só podemos dizer se o roteamento não é em tempo real.

3 soluções

De acordo com a documentação do Qt, é tentativa e erro, e vários métodos foram usados; não importa como você desconecte o cabo de rede, a classe tcpsocket do Qt ainda não detecta que a rede está desconectada e o envio ainda é normal. (Eu pensei que esta classe de Qt seria melhor do que a classe TCP IP geral. É apenas uma visão panorâmica. Quanto à opção keepalive, a mudança de estado não está disponível. Muitos servidores TCP também precisarão usar a opção keepalive para serem eficazes ? No futuro, tente se tiver tempo); existem duas soluções agora: 1) Use o método de pacote de pulsação; envie a resposta do servidor uma vez a cada segundo; isso consome recursos da CPU; 2) (recomendado) detectar socket_send(qbytedata msg) em sua própria função de envio O status do estado qtcpsocket, se o status não estiver conectado, reconecte; porque a mudança de estado aqui só terá efeito depois que o servidor do IP de destino estiver conectado à rota (desconectar ou desconectar não terá efeito ).

Guess you like

Origin blog.csdn.net/jb_mai/article/details/124986953