Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 2006
-
3 sept. 2003 à 19:29
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 2006
-
3 sept. 2003 à 23:09
Voila mon problème : je recoit en temps normal par socket une chaine que j'afiche ds un edit, seulement, j'ai crée un systeme d'envoi de fichier qui peut également envoyé des chaine binaire que j'inscrit ds un fichier...
Ma question est : comment je peut reconnaitre si la chaine est binaire ou non afin de pouvoir la traité comme il le faut ? J'ai essayé plusieur méthode mais sans succès...
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 3 sept. 2003 à 19:45
en testant avec if(buf[0]<9) par exemple, il le considere comme une chaine normale et l'affiche (d'ailleur il affiche n'importe quoi, et pas des 0 ou 1 contrairement a ce que je pensai...)
merci quand même
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 sept. 2003 à 20:10
Salut,
Il faut tester tout les octets du buffer que tu as recu et si l'un d'entre eux est < 9 alors tu peux considerer ce que tu as recu comme du binaire. Aussi, il faut penser a envoyer les chaines de caracteres sans les caracteres NULL de la fin.
Ca devrait fonctionner je pense.
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 3 sept. 2003 à 20:21
Bon ben soi ca ne marche pas, soi je m'y prend mal... en tt cas, g rien de bien convaincan...
Mais c'est pas très grav, j'ai pensé a une autre solution, je vais écrir "char" avant tte les chaines normales comme ca je pourrai facilement les reconnaitre, il me suffira juste de l'enlevé après pour l'afficher
@+
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 sept. 2003 à 20:37
Salut,
Si j'etais toi je mettrais un flag a la fin de la chaine aussi.
Imagine que ton client envoie 2 paquets, l'un est une chaine, l'autre est binaire: il est tout a fait possible que ton serveur recoive les 40 octets d'un coup dans un buffer, et interprete tout le buffer comme une chaine de caractere.
Moi je pense que tester la valeur de chaque octet est une meilleure idée, et en plus ca l'alourdira pas tes buffers.
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 3 sept. 2003 à 20:47
Je pense aussi que tu as raison, surtout que je vien de testé ma technique, elle n'as pas l'air de fonctionner comme je le voulais...
Enfin, comme le teste de la chaine ne marche pas chez moi, j'ai pensé a une autre solution, pour évité tout les risque de conflit, je peut fair passé le transfert par un autre socket, mais pour cela il faut recrée une écoute sur un autre port et je la fleme de faire tt ca... Je crois que je vais resté a mon ancienne version ou on doit attendre que la création du fichier soit terminé pour pouvoir envoyé des message normaux...
Je ne vois pas d'autre technique simple
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 3 sept. 2003 à 20:59
Dis voir Anacr0x, tu l'as ecrit comment ton teste ?
c'est du char (le type) sur lequel tu testes < 9 ???
En ce cas nenni, faut caster BYTE.
BruNews, ciao...
J'ai deux problème, le premier, la chaine caractère est tt de même écrite dans le fichier... le deuxieme, certains fichier ne supporte pas ce traitement, par exemple, en essayant d'échanger un fichier winrar auto-extratible, ca maffiche du text (compréhensibl cette fois) contenu dans le fichier, et encore une fois, le fichier est altéré
Pour le 1er pb, je crois que c'est parcequ'il colle les packet recu ensemble (donc une chaine normale sera considéré comme binaire s'il yen a avant ou a la suite)
Pour le second, si c'est normale, je préfère ne pas utilisé ce test et être sur que tout les fichiers transmi sont bien valides
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 3 sept. 2003 à 22:22
Salut,
C'est bon ca.
Le prob vient surement du moment ou tu envoies tes données binaires.
Tu aurais pas envoyé un Buffer de d'une taille egale a strlen(Buffer) par hazard ?
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 3 sept. 2003 à 22:26
Pour les chaine de caractère normales oui, ya un strlen, sinon, pour l'envoi de fichier, c'est des paquets de 1024 octet tt le tps
Tu crois ke le fait de mettre des paquet de 1024 meme pour les message normaux changera quelques chose ? jsui pas trè convaincu la...
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 3 sept. 2003 à 22:36
Ah oki, nan quand meme, j'ai retenu la lecon, j'évite de faire plusieur fois la même erreur (^_^)
Bon sinon, je vous remercie beaucoup de m'avoir aidez, je crois ke je vais pas utilisé cette technique (je pense qu'elle marche pour une chaine simple, mais mon cas a l'air plus compliqué) mais plutot une otr socket ou alor je me démerderé d'une manière ou d'une autre...
Merci encore à tout les deux, @+