[Sockets] Problèmes de réceptions/envois

Résolu
Signaler
Messages postés
49
Date d'inscription
mardi 13 avril 2004
Statut
Membre
Dernière intervention
18 juin 2007
-
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
-
Salut à tous !

Donc voila j'essaye d'ajouter la gestion des sockets à mon langage de script. J'ai implementé les fonctions mais ca ne marche qu'a moitié.

Le client peut se connecter au serveur, envoyer un message, mais le serveur ne recoit le message qu'une fois que la socket est close du côté du client.

Le code en Syp Script (mon langage de script):

# server

test: !open_port_socket :syp_server_socket 6969

!listen_port_socket :test

!print !read_port_socket :test
!write_port_socket :test "pong"

!close_port_socket :test

!ask

# client

test: !open_port_socket "127.0.0.1" 6969

!write_port_socket :test "ping"
!print !read_port_socket :test

!close_port_socket :test

!ask

L'implémentation des fonctions concernées en C++:

Voir ici: http://pastebin.fr/50

Je suis sur que c'est une erreur toute bête :/

Merci d'avance pour vos réponses

gg_tk

1 réponse

Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
C'est le code qui le veut!
A partir du moment où le serveur fait son script "!read_port_socket :test" on arrive ligne 152 le serveur fait un recv et ajoute le buffer temporaire à sypbuffer ligne 155. Puis la boucle infinie continue! Elle ne stoppe que lorsque recv retourne 0, ligne 154, c'est à dire lorsque le client ferme, ce qui exécute le code de close_port_socket ligne 64 si j'ai bien compris. D'ailleurs le WSACleanup(); qui s'y trouve ne drvrait être invoqué qu'à la fermeture de l' appli.

Conseil: le code de read_port_socket (ligne 127) ne devrait QUE faire un recv, rien d'autre. Pour l'instant on est dans une boucle infinie qui fait un recv et attend que recv retourne -1 ou 0 pour continuer. Pas normal.

Sinon c'est super intéressant de développer un langage de script, bonne prog.

I can break the rules too, goodbye.