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.
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.
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);
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?
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
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);
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...
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...
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.