Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD9] Utilisation d'un Buffer avec les sockets

12 réponses
Avatar
Sylvain
Bonjour tout le monde,
Actuellement je travail avec les sockets pour un transfert de fichier client
à client pour une de nos applications, je voudrais transmettre des
structures par le biais des sockets donc j'utilise transfert pour remplir
mon buffer

Transfert(&Buffer,&TrameListFile,Dimension (TrameListFile))
Avant celà j'initialise mon Buffer avec : Buffer=Répète(" ",Dimension
(TrameListFile))

Lorsque j'envoie sur mon socket avec SocketEcrit("Client",Buffer) j'ai une
erreur Access violation (GPF).

J'utilise le mode de transmission par defaut, si je stock une chaine dans le
buffer ça passe sans problème.

Voilà un exemple de structure utilisé:

TTrameListFile est une structure
TailledeLaTrame est un entier
TypedeTrame est un entier=1
Nomdefichier est une chaîne ASCIIZ sur 255
Hach est une chaîne ASCIIZ sur 22
Taille est un entier
FIN

Je suppose que je m'y prend mal c'est la première fois que j'utilise les
socket sous windev (je pense que çelà vient de ma façon de remplir mon
buffer)

Donc si quelqu'un à une solution je suis ouvert à toute proposition.

Cordialement
Sylvain L.

10 réponses

1 2
Avatar
Romain PETIT
Dans son message précédent, Sylvain a écrit :
Bonjour tout le monde,



Bonjour,

Transfert(&Buffer,&TrameListFile,Dimension (TrameListFile))



Quel est le type de la variable "Buffer" ?

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Sylvain
"Romain PETIT" a écrit dans le message de news:

Dans son message précédent, Sylvain a écrit :
Bonjour tout le monde,



Bonjour,

Transfert(&Buffer,&TrameListFile,Dimension (TrameListFile))



Quel est le type de la variable "Buffer" ?

A+

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)




Le type de la variable est buffer
Apparement les sockets n'acceptent que les chaines ou une varaible de type
buffer dans WD9

Cordialement
Sylvain L.
Avatar
Romain PETIT
Sylvain a émis l'idée suivante :

Le type de la variable est buffer



C'est un type de variable nouveau dans WD9 ?

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Franck
Romain PETIT avait énoncé :
Sylvain a émis l'idée suivante :

Le type de la variable est buffer



C'est un type de variable nouveau dans WD9 ?



Romain, cela existe aussi en 8.

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Franck
> TTrameListFile est une structure
TailledeLaTrame est un entier
TypedeTrame est un entier=1
Nomdefichier est une chaîne ASCIIZ sur 255
Hach est une chaîne ASCIIZ sur 22
Taille est un entier
FIN



Salut,

Essayes:

Matrame est une TTrameListFile

Initialises tes valeurs de la manière suivante:

Matrame:tailledelatrame0
etc...

Affecte MaTrame à ton buffer

Buffer=matrame

Ecris sur ta socket:
socketecrit(socket,buffer)

sinon tu peux initialiser ton buffer d'octet en octet de la manière
suivante:

buffer[[1 a 4]]=tailledelatrame (Entier = 4 octets)
buffer[[5 a 8]]=typedelatrame
buffer[[9 a 137]]=nomdefichier

et ainsi desuite.

A+

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Romain PETIT
Dans son message précédent, Franck a écrit :

Le type de la variable est buffer


C'est un type de variable nouveau dans WD9 ?


Romain, cela existe aussi en 8.



Ah, moi je suis en WD7.5...
Et c'est quoi la définition d'un type "buffer" en 8/9 ?

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Romain PETIT
Dans son message précédent, Romain PETIT a écrit :

Et c'est quoi la définition d'un type "buffer" en 8/9 ?



Personne ne veut me dire ce qu'il est écrit dans l'aide de WD8 ou WD9
sur ce type de variable ?

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Sylvain
"Romain PETIT" a écrit dans le message de news:

Dans son message précédent, Romain PETIT a écrit :

Et c'est quoi la définition d'un type "buffer" en 8/9 ?



Personne ne veut me dire ce qu'il est écrit dans l'aide de WD8 ou WD9 sur
ce type de variable ?

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)



Aide de WD9

Le type Buffer correspond à une zone mémoire binaire.
Grâce à ce type, un code manipulant du binaire sera portable entre une
application WinDev standard et une application WinDev Mobile.
Sous WinDev standard, une variable de type chaîne de caractères peut aussi
bien contenir des caractères que des données binaires (une image par
exemple).
Sous WinDev Mobile, si une variable de type chaîne de caractères contient
des données binaires, ces données peuvent être érronées (conversion
malencontreuse par exemple). Pour manipuler des données binai­res, nous vous
conseillons d'utiliser une variable de type buffer.
De plus, le type buffer permet d'utiliser un code identique dans une
application WinDev Mobile et dans une application WinDev standard.
Le type buffer ne gère pas de marqueur spécifique de fin, et permet de
stocker des 0 binaires. Ce type permet de manipuler une zone mémoire dont la
taille est dynamique : elle s'adapte automatiquement au contenu du buffer.

Cordialement
Sylvain L.
Avatar
Romain PETIT
Sylvain a émis l'idée suivante :
Le type Buffer correspond à une zone mémoire binaire.


[...]

Ok, merci Sylvain.

--
Romain PETIT
http://cerbermail.com/?IJmancZl88
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Sylvain
"Franck" a écrit dans le message de news:

Affecte MaTrame à ton buffer

Buffer=matrame

Ecris sur ta socket:
socketecrit(socket,buffer)

sinon tu peux initialiser ton buffer d'octet en octet de la manière
suivante:

buffer[[1 a 4]]=tailledelatrame (Entier = 4 octets)
buffer[[5 a 8]]=typedelatrame
buffer[[9 a 137]]=nomdefichier



D'abord merci de ta réponse,
On ne peut malheureusement affecté une structure au buffer déja essayé ^^
ça réponse : Un élément de type TTrameListFile ne peut pas être converti
vers le type binaire. bref génial :p

Pour ce qui est de l'initialisation octet par octet si je pouvais m'en
passer ce serais pas mal car je vais avoir une trentaine de trames et il
faudrais que je le fasse coté client et coté serveur bref c'est pas terrible
mais je garde cette solution dans le pire des cas.

Cordialement
Sylvain L.
1 2