Page 1 sur 2

SendNetworkData()

Publié : lun. 25/avr./2005 14:32
par Lea40
Bonjour,

j'essaye de transmettre une chaine dont le dernier caractére est un 0 binnaire.
J'utilise pour cela la commande :

Code : Tout sélectionner

Ligne$ = "ABCDEFG"+chr(0)
SendNetworkData(ConnectionID, Ligne$, Len(Ligne$)+1)
sur le serveur, je ne recoit pas le 0.
Ou est l'erreur.

Par avance merci

Publié : lun. 25/avr./2005 14:39
par Heis Spiter
Le serveur récupérera la chaîne à l'aide un pointeur. Or pour récupérer la chaîne, il faudra faire un PeekS(). Or PeekS s'arrête au premier caractère d'ascii 0...

Publié : lun. 25/avr./2005 15:17
par cederavic
Oui, Chr(0) (ou character null), sert a délimiter les chaines de charactere

Publié : lun. 25/avr./2005 15:57
par Lea40
Quelle différence y a t'il entre :

Code : Tout sélectionner

SendNetworkData et
SendNetworkString ?
Qu'appele t'on :
Envoie des données brutes au client spécifié... ?

N'y a t'il pas moyen de contourner le pb ?

Encore merci de vos explications.

Publié : lun. 25/avr./2005 19:04
par comtois
et comment fais-tu la réception des données ?
Resultat = ReceiveNetworkData(ConnectionID, *BufferMemoire, Longueur)

'Resultat' contient le nombre d'octets effictivements lus par la fonction. Si 'Resultat' est égal à 'Longueur', alors il reste des données en attente à lire.

Publié : mar. 26/avr./2005 9:32
par Lea40
En fonction d'un protocole que je défini

Dans l'application qui m'interresse, l'échange entre un client et un serveur est parfaitement codifié.
Malheureuseement le serveur ne comprend la fin des messages que par la reception d'un \0

Publié : mar. 26/avr./2005 11:32
par cederavic
Je suppose que tu utilise PeekS pour récuperer la chaine, essay en faisant PeekS(*Pointeur +1)
Pas sur que ça marche, et que ce soit correcte..

Publié : mar. 26/avr./2005 13:32
par Lea40
Merci

J'essaye

Publié : mar. 26/avr./2005 17:34
par Heis Spiter
cederavic a écrit :Je suppose que tu utilise PeekS pour récuperer la chaine, essay en faisant PeekS(*Pointeur +1)
Pas sur que ça marche, et que ce soit correcte..
T'as méthode permet de récupérer tous les caractères sauf le premier, non ?

Publié : mer. 27/avr./2005 7:39
par Lea40
Bonjour,
T'as méthode permet de récupérer tous les caractères sauf le premier, non ?
Tu as raison....

Publié : mer. 27/avr./2005 7:41
par Lea40
Je vais continuer à chercher

Merci encore...

Publié : mer. 27/avr./2005 7:56
par Dr. Dri
En tout cas ce n'est pas avec une chaîne de caractère que tu pourras faire ca... La chaîne s'arrête au premier '\0' qu'elle rencontre (pas comme en PHP par exemple)

En PB ce sont des "null-terminated strings", du coup, si tu veux lire une série de caractères finie par un zéro, voilà un petit exemple :

Code : Tout sélectionner

truc$ = "bonjour"
*Pointeur = @truc$

;------------------------

*pChaine.BYTE = *Pointeur - 1

Repeat
  *pChaine + 1
  Debug *pChaine\b
Until *pChaine\b = 0
Dri

Publié : mer. 27/avr./2005 8:05
par Lea40
Oui pour lire, mais pour écrire et envoyer ce 0\ ?

Publié : mer. 27/avr./2005 8:09
par Lea40
Je me demande si il n'y a pas un petit bug.

Car je ne m'explique pas autrement la meme réaction à l'execution de

SendNetworkData et de
SendNetworkString

Qu'en pensez vous ?

Publié : mer. 27/avr./2005 8:54
par Dr. Dri
pas de bug, c'est vraiment l'interprétation PB des "null-terminated strings" qui fait que tu n'auras jamais le caractère \0 dans une chaîne...

Tu peux par contre envoyer une zone mémoire qui contient un octet à zéro sans aucun problème... mais ce n'est pas avec des fonctions de chaîne que tu le récupèreras...

Dri