Я использую QWebSocketServer с Qt5.8.У большинства клиентов WebSocket нет проблем с подключением к нему, но один из них вызывает особенное поведение.
Ниже приведен перехват WireShark, который я получаю с помощью этого клиента (клиент 10.8.0.1, сервер 10.8.0.8).
10.8.0.1 10.8.0.8 TCP 44 51331 → 8888 [SYN] Seq=0 Win=2920 Len=0 MSS=1355
10.8.0.8 10.8.0.1 TCP 44 8888 → 51331 [SYN, ACK] Seq=0 Ack=1 Win=29200 Len=0 MSS=1460
10.8.0.1 10.8.0.8 TCP 40 51331 → 8888 [ACK] Seq=1 Ack=1 Win=2920 Len=0
10.8.0.1 10.8.0.8 TCP 64 51331 → 8888 [PSH, ACK] Seq=1 Ack=1 Win=2920 Len=24 [TCP segment of a reassembled PDU]
10.8.0.8 10.8.0.1 TCP 40 8888 → 51331 [ACK] Seq=1 Ack=25 Win=29200 Len=0
10.8.0.8 10.8.0.1 TCP 40 8888 → 51331 [FIN, ACK] Seq=1 Ack=25 Win=29200 Len=0
10.8.0.1 10.8.0.8 HTTP 209 GET /example HTTP/1.1
10.8.0.8 10.8.0.1 TCP 40 8888 → 51331 [RST] Seq=1 Win=0 Len=0
10.8.0.1 10.8.0.8 TCP 40 51331 → 8888 [ACK] Seq=194 Ack=2 Win=2919 Len=0
10.8.0.8 10.8.0.1 TCP 40 8888 → 51331 [RST] Seq=2 Win=0 Len=0
10.8.0.1 10.8.0.8 TCP 40 51331 → 8888 [FIN, ACK] Seq=194 Ack=2 Win=2919 Len=0
10.8.0.8 10.8.0.1 TCP 40 8888 → 51331 [RST] Seq=2 Win=0 Len=0
Ниже приведен перехват WireShark, который я получаю от рабочего клиента, подключающегося ктот же сервер (клиент 192.168.1.48, сервер 192.168.1.111).
192.168.1.48 192.168.1.111 TCP 74 37556 → 8888 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=7880001 TSecr=0 WS=16
192.168.1.111 192.168.1.48 TCP 74 8888 → 37556 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=3996923817 TSecr=7880001 WS=128
192.168.1.48 192.168.1.111 TCP 66 37556 → 8888 [ACK] Seq=1 Ack=1 Win=29200 Len=0 TSval=7880013 TSecr=3996923817
192.168.1.48 192.168.1.111 HTTP 264 GET /example HTTP/1.1
192.168.1.111 192.168.1.48 TCP 66 8888 → 37556 [ACK] Seq=1 Ack=199 Win=30080 Len=0 TSval=3996923820 TSecr=7880013
192.168.1.111 192.168.1.48 HTTP 540 HTTP/1.1 101 Switching Protocols Continuation
192.168.1.48 192.168.1.111 TCP 66 37556 → 8888 [ACK] Seq=199 Ack=475 Win=30272 Len=0 TSval=7880034 TSecr=3996924025
192.168.1.48 192.168.1.111 WebSocket 136 WebSocket Text [FIN] [MASKED]
Насколько я понимаю, в первом случае моя реализация QWebSocketServer отправляет сообщение [FIN] по причине, которую я не задал.Я не понимаю, прежде чем клиент сможет отправить HTTP-запрос на обновление.
Может ли это быть вызвано тем, что первый клиент отправляет TCP-сообщение [PSH, ACK], а второй - нет?Кто здесь не соответствует протоколу WebSocket?