| |
Posté le 05 octobre 2008 - 13:29 |
Bonjour, Ma question reposse sur les sockets, j'arrive a créer une socket entre deux postes et envoyer des messages textes ex :"BONJOUR,..." mais est-il possible d'envoyer des fichiers.FIC par socket et comment? merci par avance |
| |
| |
| | | |
|
| | |
| |
Posté le 05 octobre 2008 - 14:13 |
Malheureusement on ne peut envoyer que des chaînes de caractère avec les Sockets Windev. Ce qui est vraiment dommage. Et on ne peut d'ailleurs pas ouvrir un fichier en binaire, lire le contenu de celui ci en binaire via les Sockets |
| |
| |
| | | |
|
| | |
| |
Posté le 05 octobre 2008 - 17:18 |
Alors a quoi peut service les socket ormis les messages pour une application de mesagerie ? |
| |
| |
| | | |
|
| | |
| |
Posté le 05 octobre 2008 - 21:00 |
Cerede a écrit :
> Malheureusement on ne peut envoyer que des chaînes de caractère avec les Sockets Windev. Ce qui est vraiment dommage. Et on ne peut d'ailleurs pas ouvrir un fichier en binaire, lire le contenu de celui ci en binaire via les Sockets
Faux, on peut sans aucun problème envoyer du binaire avec les sockets. Il suffit pour cela d'utiliser le type de variable "buffer" au lieu du type "chaine".
Exemple:
Si tu veux envoyer un entier sans signe de deux octets au travers d'une socket, tu fais:
nSize est un entier sans signe sur 2 octets0 bfData est un buffer bfData[[1 a 2]]=nSize
SocketEcrit(socket,bfData[[1 a 2]]) |
| |
| |
| | | |
|
| | |
| |
Posté le 05 octobre 2008 - 22:20 |
bonjour,
Bien sur que l'on peut envoyer des fichiers fic ou autres par sockets
Il suffit de faire un flit par bloc de 1024 octets (je dis ça au hasard) faut faire des tests et transmettre bloc par bloc avec un socket. |
| |
| |
| | | |
|
| | |
| |
Posté le 06 octobre 2008 - 01:40 |
Bonjour Stéphane...
sans avoir testé: - charger le fichier dans uen chaine (fchargetexte) - envoyer la chaine - de l'autre coté, sauver la chaine comme un fichier (fsauvetexte) - S nécessaire envoyer d'abord une chiane d'info contenant le nom du fichier
Si envoyer le contenu binaire du fichier en tant que chaine pose problème, le transformer en 'chaine pure' soit avec sérialise, soit avec la fonction de cryptage, option resultat ascii, soit encore avec les fonctions d'encodage de chaine xxxversyyyy
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
Plus d'information sur http://fabriceharari.com/index_FR.html
stephane wrote:
Bonjour, Ma question reposse sur les sockets, j'arrive a créer une socket entre deux postes et envoyer des messages textes ex :"BONJOUR,..." mais est-il possible d'envoyer des fichiers.FIC par socket et comment? merci par avance
|
| |
| |
| | | |
|
| | |
| |
Posté le 06 octobre 2008 - 15:53 |
Eu j'ai tester ça ne fonctionne pas... Quand on lit le fichier fic avec flit ça renvoit une fois PCS et c'est tout, après plus rien... |
| |
| |
| | | |
|
| | |
| |
Posté le 06 octobre 2008 - 17:11 |
Cerede a écrit :
Eu j'ai tester ça ne fonctionne pas... Quand on lit le fichier fic avec flit ça renvoit une fois PCS et c'est tout, après plus rien...
Je vais me répéter mais bon Il faut utiliser le type BUFFER et non CHAINE pour transmettre du binaire!
Dans ton cas, il faut:
- Ouvrir le fichier, - Le lire par blocs (exemple: 4096 octets) jusqu'à sa fin - Affecter le résultat de chaque lecture dans une variable de type BUFFER - Transmettre la variable BUFFER via ta socket. - Fermer ton fichier une fois lu et transmis.
Utilise la syntaxe suivante:
SocketEcrit(sSocket,bfBuffer[[ a taille(bfBuffer)]])
ou:
sSocket est le nom de la socket bfBuffer la variable de type BUFFER
That's all. |
| |
| |
| | | |
|
| | |
| |
Posté le 06 octobre 2008 - 18:22 |
Oui ok donc en gros comme ceci:
idfile est un entier = fOuvre(fRepExe() + "\Test.FIC", foLecture) SI idfile ALORS BuffFile est un Buffer TANTQUE PAS fPositionne(idfile, 0, fpCourant) <> fpFin BuffFile = fLit(idfile, 1024) SocketEcrit("Serveur", BuffFile[[ A Taille(BuffFile)]]) FIN fFerme(idfile) FIN
Mais comment signifier au client que la fin di fichier est atteint et qu'il doit arreter de recevoir? |
| |
| |
| | | |
|
| | |
| |
Posté le 06 octobre 2008 - 20:33 |
Bonjour
Comme je le disais dans mon post précédent concernant le nom du fichier, on COMMENCE par enovyer ue chaine de paramètre (nom du fichier, TAILLE du fichier, QUOI QUE CE SOIT D'AUTRE de nécessaire), comme ca, l'autre coté n'a qu'à ajouter les tailles jusqu'au total
Cordialement
-- Fabrice Harari International WinDev, WebDev and WinDev mobile Consulting
More information on http://www.fabriceharari.com
PS: Ca serait peut être une bonne idée de lire en détail les réponses qu'on t'envoie ?
Cerede wrote:
Oui ok donc en gros comme ceci:
idfile est un entier = fOuvre(fRepExe() + "\Test.FIC", foLecture) SI idfile ALORS BuffFile est un Buffer TANTQUE PAS fPositionne(idfile, 0, fpCourant) <> fpFin BuffFile = fLit(idfile, 1024) SocketEcrit("Serveur", BuffFile[[ A Taille(BuffFile)]]) FIN fFerme(idfile) FIN
Mais comment signifier au client que la fin di fichier est atteint et qu'il doit arreter de recevoir?
|
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2008 - 02:27 |
Oui en envoyant la taille mais il n'y a pas moyen de se passer de cette chaîne de paramètres? Si on s'arrête quand la taille de ce qu'on a reçu est égale à 0 ça peut suffire non? |
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2008 - 09:03 |
Bien sur...
si tu peux être CERTAIN que l'émetteur ne va pas se planter avant la fin... Peux tu ?
Cordialement
-- Fabrice Harari Consultant WinDev, WebDev et WinDev Mobile International
Plus d'information sur http://fabriceharari.com/index_FR.html
Cerede wrote:
Oui en envoyant la taille mais il n'y a pas moyen de se passer de cette chaîne de paramètres? Si on s'arrête quand la taille de ce qu'on a reçu est égale à 0 ça peut suffire non?
|
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2008 - 10:46 |
Oui d'accord mais à ce moment ne faut il pas aussi mettre en place un contrôle d'erreur? Etre sur que celui qui reçoit, a bien reçu ce qu'on a envoyé?
Et comment faire? |
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2008 - 11:56 |
il suffit de mettre en place un CRC
Avec la fonction une fonction comme le MD5 ou mieux (a toi de voir), celui ci va te donner une chaine qui est unique a ton fichier.
une fois reçu ton fichier, tu compare les md5.
ps : tu peux mettre des mots clés comme DEBUT taille de ton fichier + RC FIN nom du fichier + RC
pour délimiter ton fichier |
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2008 - 12:52 |
Ok pour comparer par exemple le MD5 du fichier une fois reçu, mais si le fichier est énorme. Pourrait ton verifier a chaque paquet reçu? |
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2008 - 19:16 |
Bien sur... il suffit d'envoyer un CRC par paquet (je ne pense pas que ce soit nécessaire, mais c'est certainement possible)
Cerede wrote:
Ok pour comparer par exemple le MD5 du fichier une fois reçu, mais si le fichier est énorme. Pourrait ton verifier a chaque paquet reçu?
|
| |
| |
| | | |
|
| | |
| |
Posté le 07 octobre 2008 - 19:55 |
Oui mais bon comment être sur qu'un paquet n'est pas été perdu... Parce que pour un fichier volumineux on va pas s'amuser à renvoyé tout le fichier |
| |
| |
| | | |
|
| | |
| |
Posté le 08 octobre 2008 - 02:06 |
En meme temps que le crc du paquet, tu envoie le numéro du paquet...
Fabrice Harari wrote:
Bien sur... il suffit d'envoyer un CRC par paquet (je ne pense pas que ce soit nécessaire, mais c'est certainement possible) Cerede wrote: Ok pour comparer par exemple le MD5 du fichier une fois reçu, mais si le fichier est énorme. Pourrait ton verifier a chaque paquet reçu?
|
| |
| |
| | | |
|
| | |
| |
Posté le 08 octobre 2008 - 09:43 |
Ok donc il faut prévoir un demande dans l'autre sens, si le receveur voit qu'il n'as pas reçu un paquet il le redemande a l'envoyeur. Mais du coup il faut que le receveur attende une confirmation à chaque paquet??? Parce que la ça va augmenter considérablement le temps d'envoi
Sinon pour mettre en MD5 j'utilise HashFichier(HA_MD5_128, <nom fichier>) Mais cette fonction est assez lente vous auriez autre chose?
Merci |
| |
| |
| | | |
|
| | |
| |
Posté le 08 octobre 2008 - 12:05 |
Il existe des classes md5 déja faite sur wdforge il me semble ou autres. Il faut chercher ! au point ou vous en êtes, je vous conseille de mettre un serveur ftp. |
| |
| |
| | | |
|
| | |
| |
Posté le 08 octobre 2008 - 23:15 |
Bjr,
Dans son message précédent, Florian a écrit :
Il existe des classes md5 déja faite sur wdforge il me semble ou autres. Il faut chercher ! au point ou vous en êtes, je vous conseille de mettre un serveur ftp.
Et un hcopiefichier ? si c'est pour envoyer des *.fic....
a plus
-- ------------------------------------------------------------- www.ctc-soft.com Gestion biblo-documentaire (free-share) Comptabilité shareware Logiciels de Gestion de saisie terrain Spécialisé Tournées de boulangers ------------------------------------------------------------- |
| |
| |
| | | |
|
| | |