J'essaie de créer une connexion TCP à partir d'un contrôleur intégré à un serveur Windows Vista. J'écris la partie serveur Windows de l'application. Lorsque le contrôleur tente de se connecter, il peut falloir plusieurs tentatives pour établir la connexion.Windows TCP Handshake Problème
J'ai utilisé Wireshark pour déboguer le problème et il semble que la pile TCP de Windows ne suit pas le protocole de prise de contact correct.
décharge Wireshark:
"No","Time","Source","Destination","Protocol","Info"
Try1:
"39","9.025322","10.0.0.252","10.0.0.92","TCP","49153 > xinuexpansion4 [SYN] Seq=0 Win=127 Len=0"
"40","9.025377","10.0.0.92","10.0.0.252","TCP","xinuexpansion4 > 49153 [ACK] Seq=1 Ack=1 Win=2048 Len=0"
"47","10.031750","10.0.0.252","10.0.0.92","TCP","49153 > xinuexpansion4 [RST] Seq=0 Win=127 Len=0"
Essayez 2:
"55","12.193941","10.0.0.252","10.0.0.92","TCP","49154 > xinuexpansion4 [SYN] Seq=0 Win=127 Len=0"
"56","12.194045","10.0.0.92","10.0.0.252","TCP","xinuexpansion4 > 49154 [ACK] Seq=1 Ack=1 Win=2048 Len=0"
"57","13.200431","10.0.0.252","10.0.0.92","TCP","49154 > xinuexpansion4 [RST] Seq=0 Win=127 Len=0"
Essayez 3:
"67","18.529871","10.0.0.252","10.0.0.92","TCP","49156 > xinuexpansion4 [SYN] Seq=0 Win=127 Len=0"
"68","18.529957","10.0.0.92","10.0.0.252","TCP","xinuexpansion4 > 49156 [SYN, ACK] Seq=0 Ack=1 Win=8192 Len=0 MSS=1460"
"69","18.536318","10.0.0.252","10.0.0.92","TCP","49156 > xinuexpansion4 [ACK] Seq=1 Ack=1 Win=127 Len=0"
10.0.0.252 est le contrôleur qui initie la connexion, 10.0.0.92 est le PC Windows. Si je comprends bien, la séquence correcte est SYN, SYN + ACK, SYN. Ce que je reçois la plupart du temps est SYN, ACK, RST (c'est-à-dire que Windows répond avec ACK plutôt que SYN + ACK). Dans la décharge ci-dessus, il montre 3 tentatives de connexion, le 3ème fonctionne.
Y at-il quelque chose que je peux faire pour 'réparer' Windows afin qu'il réponde correctement?
EDIT - 2 paquet capture
- shows the embedded controller taking 4 attempts to connect.
- shows the windows client connecting and disconnecting twice without problem.
Andy, je pense que vous êtes sur quelque chose là-bas. J'ai changé mon code serveur pour être plus agressif dans la fermeture des connexions socket perdues. Maintenant, les clients se connectent la première ou la deuxième fois.Il semble que Vista mettait en cache la connexion et supposait simplement que le client voulait réinitialiser les numéros de message. Je développais le logiciel client et donc redémarrais le contrôleur intégré fréquemment et par conséquent réinitialiser le numéro de message. Merci beaucoup pour votre aide. Paul –