communication client/serveur avec python - Python - Programmation
Marsh Posté le 31-07-2003 à 17:27:43
Remarque je comprends rien a ta méthode de traitement coté serveur...
Tu veux pas la remettre en forme ?
Marsh Posté le 31-07-2003 à 17:31:21
j'ai pas lu ton code. moi quand je fais ce genre de chose, voilà comment je procède. j'ai une joli classe qui encapsule les sockets et qui fait passer les message avec pickle (dumps/loads) et un paramètre optionnel au constructeur pour faire gzip le flux en sus
Marsh Posté le 31-07-2003 à 17:34:59
Bon c'est pas facile vu que les tabulations sont un peu en vrac, mais a priori je dirais que ton probleme viens de :
(je suppose pour la mise en forme...)
Code :
|
Vu que msgRecv n'est pas None, ben ton if tu passes pas dedans et ton serveur il boucle...
Mais ca devrait afficher indefiniment :
"MSG RECU: blablabla"...
Donc si tu peux reformater ton code, on pourra certainement t'aider !
EDIT: je sais pas pourquoi il veut pas aligner le print 'Dans break'...
Marsh Posté le 31-07-2003 à 17:39:43
Ah non j'ai compris...
Tu rappelle le recv sur le socket tant que t'as pas None...
C'est pas très propre, et surtout ca peut ne pas marcher
tes sockets ne serait-il pas en mode bloquant ???
Auquel cas msgRecv ne recoit jamais None mais attends indefiniment...
Marsh Posté le 01-08-2003 à 09:16:44
ProToinou> Si ca te fais chier que j'essaye de t'aider a resoudre ton problème, faut le dire !!!
Marsh Posté le 01-08-2003 à 11:25:01
Ouai dsl les gars comme kristoph va vous l'écrire moi j'ai juste poster pour lui... car il n'avait pas encore de compte (c'est mon collègue, qui soit disant en passant n'a pas du tout le meme niveau que moi en python, lui il est bon, enfin c'est écrit sur son CV en tout cas)
Donc dsl de ne pas réagir à ce post
Marsh Posté le 01-08-2003 à 11:31:36
salut tout le monde!
Protoinou c'est moi!
Enfin non, j'ai demandé a ProToinou de poster ma question vu que je n'avais pas recu de confirmation d'inscription par l'admin du forum et donc je ne pouvais rien poster.
Desolé pour vous repondre que maintenant, j'ai toujours beaucoup de boulot et donc pas beaucoup de temps.
J'ai compris mon problème tadam!
Enfin je crois. En tout cas j'ai une solution.
mon msgRecv=self.request.recv(1048) est a priori bloquant.
Ce qu'il faut faire, c'est d'envoyer dans un premier message la taille du big message qui va suivre.
On a alors:
tailleRestanteDuGrosMessage = premier message
Ensuite le serveur fait un
while 1:
if tailleRestanteDuGrosMessage!=0:
taillePaquet=min(1024,tailleRestanteDuGrosMessage)
msgRecv=self.request.recv(taillePaquet)
print 'MSG RECU:', msgRecv
tailleRestanteDuGrosMessage=tailleRestanteDuGrosMessage - taillePaquet
if tailleRestanteDuGrosMessage<0:
tailleRestanteDuGrosMessage=-tailleRestanteDuGrosMessage
else:
print 'dans le break!'
msgSend='Msg Recu avec succès!'
print 'msgSend envoyé!'
self.request.send(msgSend)
break
print 'Done with connection'
Voila!!!! La ca marche!!!
On ne fait plus de recv sans etre sur d'avoir encore quelque chose dans le buffer des messages recus.
Merci e_esprit t'etais dans le vrai avec ta derniere remarque.
Taz, c'est quoi cette methode avec pickle (dumps/loads)? Je ne connais pas. (au fait tu n'es pas le Taz d'Orsay?)
Marsh Posté le 01-08-2003 à 11:55:22
OK, c'est bon.
Tu noteras aussi que ma premiere remarque etait exacte (la taille des messages est toujours le premier probleme que l'on rencontre quand on utilise les sockets).
Sinon moi je fais plutot comme ca :
|
Marsh Posté le 01-08-2003 à 16:12:13
Ton petit code est bcp mieux que le mien.
Y'a un truc que je ne connais pas:
Qu'elle est la taille max qui peut etre recupere avec un seul "msg = self.socket.recv(msg_size)" ?
Marsh Posté le 01-08-2003 à 17:04:07
Chriss a écrit : Ton petit code est bcp mieux que le mien. |
Bah ca dépends de plein de choses...
C'est du a l'architecture reseau, a la taille des buffers de ta carte reseau, du protocole utilisé, de l'OS, de l'encombrement, etc.
Mais tu peux mettre un nombre tres tres grand, au pire tu recupereras pas tout, mais c'est pas grave puisque c'est toi qui le gere !
Je te conseille de lire ca :
Socket Programming HOWTO
Ils en parlent un peu...
Marsh Posté le 30-07-2003 à 12:16:59
J'ai un client et un serveur.
L'objectif est que le client envoie un gros message au serveur et que le serveur, une fois qu'il a récupéré le gros message, envoie un message au client.
Ca parait tout bete. Et bien ca fait 2 semaines que je suis dessus.
Le gros message envoyé par le client est bien recu par le serveur mais le serveur n'arrive pas a envoyer sa reponse qui est 'Msg Recu avec succès!'
Please help me!!!!
Le code serveur: