ipascual
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention15 janvier 2007
-
6 déc. 2006 à 19:19
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 2014
-
8 déc. 2006 à 00:42
Bonjour a tous,
Je suis en train de faire un serveur en C++, qui marche. Je l`ai deja teste, et tout, el en generale il n`y a pas de problemes...L`unique probleme que j`arrive pas a comprendre c`est pourquoi la taille maximale de caracteres reçus ou envoyés, sont au max. 4. C`est a dire, si le client envoye la phrase "Bonjour le monde", le serveur reçoit toute la phrase, mais en plusieurs phases :
Bonj
our
le m
onde
Le probleme devient plus grave, quand c`est le serveur qui doiti envoyer des messages, car il envoye que 4 caracteres...Exemple:
Bonjour le monde!!
String envoyé: Bonj
Je suis sur et certain que le probleme vient du serveur, mais j`arrive pas a trouver la modif a faire, pour amplier le nomre de caracteres a envoyer\recevoir.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 7 déc. 2006 à 01:16
Salut,
Il faut voir la déclaration de ton buffer.
Si tu fais: char* buffer; la taille de buffer sera toujours 4 puisque c'est un pointeur.
Par contre si tu fais char* buffer[1024]; la taille sera bien 1024.
ipascual
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention15 janvier 2007 7 déc. 2006 à 17:11
Bonjour,
Je suis d`acord que le probleme peut venir du buffer. Par contre, j`arrive pas a reussir a faire char *buffer[1024], car le compilateur me donne un erreur:
" error C2664: 'recv' : cannot convert parameter 2 from 'char *[]' to 'char *' "
avec recv:
int rv=recv(csock,buffer,sizeof(buffer),0);
ipascual
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention15 janvier 2007 7 déc. 2006 à 21:32
Bonjour ,
En fait, j`ai essayé de faire ta modification. J`arrive a compiler sans erreurs , mais j`ai toujours le probleme de reception. Ma longueur maximale est de 4...Est-ce que je peux modifier d`autres parametres?
ipascual
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention15 janvier 2007 7 déc. 2006 à 23:25
Ok. J`ai cree deux Clients, un client en C++ et un autre en Java. A niveau de connexions il y a pas de problemes, mais j`insiste, il coupe les messages de 4 en 4..(Bonjour le monde...)
Bonj
our
le m
onde
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 7 déc. 2006 à 23:48
Dans ton client C++, send() va envoyer 1024 octets au serveur. Normalement, il ne faut envoyer que la chaine de caractères. Donc:
send(sock,buffer,strlen(buffer)+1,0);
ipascual
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention15 janvier 2007 7 déc. 2006 à 23:54
J`utilise Visual C++ 6.0.
En fait, le client en C++ je l`ai fait just pour tester avec une premiere approche le serveur en C++. Par la suite, ce qui m`interesse c`est le client java, qui lui envoye les chaines comme il faut. L`unique probleme que j`ai c`est que les chaines arrivent par morceaux. Je pense que c`est le but de code du serveur qui coince, car quand j`essaie d `envoyer des chaines du serveur C++ au client (C++ ou Java) Il y a que 4 caracteres qui sont envoyes. Quand on fait l`inverse, toute la chaine est envoye, mais recue par morceaux....
c`est ceci que je ne comprends pas...
ipascual
Messages postés28Date d'inscriptionsamedi 29 avril 2006StatutMembreDernière intervention15 janvier 2007 8 déc. 2006 à 00:19
Bonjour,
En effet cela ça marche . Merci beaucoup. Mais il y a une chose que j`arrive pas a comprendre....pourquoi sizeof(buffer) ne marcheait pas? Pourquoi just 4? Encore merci, pour m`aider avec mon probleme. Meme si c`est resolu...j `aimerais comprendre pour quoi il marchait pas...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 8 déc. 2006 à 00:40
sizeof() est utilisée par le compilateur pour déterminer le nombre d'octets occupés par une structure ou un tableau. Ce nombre sera écrit en dur dans l'exécutable. C'est à dire par exemple que sizeof(buffer) sera remplacé par 1024 dans le code de l'exécutable. Je n'avais jamais rencontré de problème de ce genre avec sizeof() avec VC6. Je viens d'ailleurs de faire un test:
char buffer[1024];
if(sizeof(buffer)==1024) MessageBox(0,"Test réussi","Test",0);
Le messagebox a été bien affiché prouvant que sizeof(buffer) a été bien remplacé par la valeur 1024.
Je pense toujours que l'erreur venait de ton code. Si ton compilateur ne réussit pas ce test, ça veut dire qu'il a un problème. Ce qui est très peu probable.