Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1562 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Envoi de fichiers par sockets en VB.NET

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Envoi de fichiers par sockets en VB.NET

n°1340324
saikal
Posté le 06-04-2006 à 10:50:18  profilanswer
 

Bonjour,
 
J'ai besoin de créer une application en VB.NET qui permet d'envoyer et de récupérer des messages ainsi que d'envoyer et de récupérer des fichiers.J'utilise donc une socket cliente et une serveur pour le transfert de message.
Je crois que pour le passage de fichier, je peu utiliser les memes sockets non?
Dans ce cas, j e ne comprends pas comment lui faire comprendre quand il doit passer dans les methodes de conception et de transmission de fichiers....
Bref je suis un peu perdue dans mes sockets
 
 :sweat:

mood
Publicité
Posté le 06-04-2006 à 10:50:18  profilanswer
 

n°1340860
moi23372
Posté le 06-04-2006 à 17:32:16  profilanswer
 

les données qu'on passe à la socket sont sous forme de byte. De ce fait, il est simple de passer un fichier puisqu'un fichier est constitué d'un ensemble de byte.  
 
Maintenant, pour différencier l'envoie de donnée et l'envoie de fichier, il suffit de mettre en place un petit byte qui préciserait le type. et de décoder de l'autre coté

n°1340874
saikal
Posté le 06-04-2006 à 17:49:49  profilanswer
 

Tu penses donc que je peu utiliser les memes sockets pour l"envoie de fichiers et de messages mais que je dois passer un byte comme parametre a l'envoi pour différencier les transferts.
Je vais essayer mais il y a aussi des notions que je ne comprends pas vraiment... J'ai récupérée un code et donc pour comprendre c''est pas facil!!
Je ne comprends pas dans les fonctions asynchrones comment le client reconnait un envoie du serveur et déclenche la procedure ici le nom est sendcallBack...


Message édité par saikal le 06-04-2006 à 17:50:10
n°1340956
moi23372
Posté le 06-04-2006 à 20:35:34  profilanswer
 

dans un échange TCP (donc mode connecté). l'un est en attente d'une réponse et l'autre envoie. De ce fait, l'asynchronisme n'est la que pour rendre l'envoie asynchrone et ne pas bloqué le programme pendant les échanges afin de laisser la main à l'utilisateur sur son programme. Donc ne te préoccupe pas de cela. C'est semblable au Thread, ça permet de faire tourner l'envoie/réception en arriere plan.  
 
l'exemple du byte n'est qu'un exemple, il y a dix milles possibilités.  
 
par exemple, ce qui se fati souvent, c'est lenvoie d'un en tete complémentaire décrivant les données (TCP, UDP, HTTP, POP, SMTP, etc... fonctionne selon se principe en cachant cela aux users).

n°1341236
saikal
Posté le 07-04-2006 à 10:35:34  profilanswer
 

LE problème c'est que l'envoie de ce byte je ne peu le faire que dans un beginSend non? Or il n'y a pas d'options qui le permet...
Enfin bon je crois je suis vraiment pas douée

n°1341340
saikal
Posté le 07-04-2006 à 12:02:49  profilanswer
 

Pour etre plus précise je pense qu'en fait la solution est d'avoir deux fonctions asynchrones différentes une pour les messages et une autre pour les fichiers mais je n'arrive pas a le mettre en place.
Lors de mes tests, a chaque fois, il part dans les fonctions des messages et puis fait comme si s'etait un message... CAR la fonction BeginReceive appelle la fonction de gestion des messages.

n°1341557
Xas
Freshershist
Posté le 07-04-2006 à 15:46:56  profilanswer
 

2 fonctions asynchrones n'est pas une bonne idée.
Rien ne t'assure de la fiabilité des données. Ex, tu reçois une demandes d'info alors que tu es en train de recupérer un fichier.
C'est source à embrouilles.
 
Tu dois formaliser les données que tu envoies :
- Tu attends qqch.
- Tu reçois une trame (on va supposer que tu codes tes infos sur 4 octets).
- Tu décodes ces 4 octets, qui t'indiques que tu vas recevoir un fichier binaire de 230ko.
- Tu sais que tu dois lire 230ko de données pour en faire un fichier.
- Tu repasses en écoute, et tu attends la prochaine instruction.


---------------
H. - 48h en fiat et j'ai déjà perdu la maitrise de mon argent
n°1341576
saikal
Posté le 07-04-2006 à 16:06:25  profilanswer
 

Ok merci je vais essayer parceque la franchement je commence a manquer d'idée.
Donc il faudrait que j'envoie avant chaque envoi de fichier ou de messages un message qui fait comprendre au programme quel type de structure je vais envoyer.
Bon j'essaye et je te tiens au courant.
MERCI!!

n°1341634
moi23372
Posté le 07-04-2006 à 16:40:35  profilanswer
 

généralement ce que moi je fais, il ne faut surtout pas envoyer de INT, FLOAT sur le réseau (problème de compatibilité avec certain système).  
 
Donc ce que tu fais
 
Envoie une chaine de caractère de 4 bytes
=> "FILE" pour fichier
=> "DATA" pour normal
 
Envoie une chaine de caractère de 10 bytes pour la taille qui va suivre.
 
Puis tu envoie le reste  
 
Donc la trame ressemblerait à ça:
 
- Header (14 bytes)
>FILE______1024<
- Data (longueur spécifié dans le header).
 
Comme ça coté client, tu lit 14 bytes, tu sais que les 4 premiers donne le type. Et les dix dernier donne la longueur en bytes. Suffit de bouclé après correctement jusqu'a avoir lu toutes les données...
 
C'est aussi simple que ça


Message édité par moi23372 le 07-04-2006 à 16:43:06
n°1341663
saikal
Posté le 07-04-2006 à 17:08:13  profilanswer
 

oulalalallalala tu me fais rire la  
c'est aussi simple que ca bon heu oui peut etre mais bon moi je trouve pas trop
Donc a ce que j'ai compris tu rajoute ces trames a ton buffer que tu envoie en fait c'est  ca?

mood
Publicité
Posté le 07-04-2006 à 17:08:13  profilanswer
 

n°1341699
saikal
Posté le 07-04-2006 à 17:35:42  profilanswer
 

oui et juste quelques autres questions , quels méthodes tu utilises pour rajouter tes entetes a ton buffer? et est ce que tu remplis ton buffer et tu rajoutes lesen têtes apres ou alors l'inverse?
Merci merci merci

n°1341714
moi23372
Posté le 07-04-2006 à 18:10:45  profilanswer
 

saikal a écrit :

oui et juste quelques autres questions , quels méthodes tu utilises pour rajouter tes entetes a ton buffer? et est ce que tu remplis ton buffer et tu rajoutes lesen têtes apres ou alors l'inverse?
Merci merci merci


 
tu as un buffer d'envoie. Tu fais comme tu veux, mais ça doit partir, donc vaux mieux construire ton buffer de bytes correctement. Il est facile par exemple de convertir de chaine de caractère (string) vers un tableau de bytes.
 
exemple:
 

Code :
  1. //header 14 bytes
  2. string header = "FILE";
  3. header = header + "      1024";
  4. byte[] headerb = Encoding.Unicode.getbytes(header);
  5. //fichier
  6. byte[] file = ... ;
  7. //construction buffer vers le réseau
  8. byte[] buffer = new byte[file.lengh + headerb.lengh];
  9. //je ne sais plus s'il y a une méthode pour copier direct des bytes dans un autre tableau
  10. int i=0;
  11. for (i=0 ; i<headerb.length ; i++)
  12.    buffer[i] = headerb[i];
  13. //copie fichier
  14. for (int j = 0; i<file.lengh ; j++, i++)
  15.    buffer[i] = file[j];
  16. //Voila que ton buffer est près à être envoyé sur le réseau. C'est quand mm pas compliqué.


 
Et pour la lecture, tu fais tout dans le sens inverse.
Tu lis 14 bytes (4 pour le type, 10 pour la taille).
Puis tu fais en concéquence.
 
PS: l'entete tjs en premier, sinon il n'a pas de sens. Le but est que le client ne lise d'abord que l'entete puis réagit en conséquence. :s C'est les bases de la programmation réseau


Message édité par moi23372 le 07-04-2006 à 18:11:57
n°1342722
saikal
Posté le 10-04-2006 à 09:06:00  profilanswer
 

Merci


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Envoi de fichiers par sockets en VB.NET

 

Sujets relatifs
envoi de messages automatiques + pièce jointe vers Outlook par AccessExplorer de fichier dynamique / Listing de fichiers dynamique
Envoi de mel + pièce jointe bloqué !!!concaténer des fichiers
poi peut-il générer des fichiers lisible ac Excel 2003[VB .Net] Afficher un powerpoint
script qui cherche des fichiers audio dans une clé usbLes fichiers
Comment transmettre des fichiers en XmlHttpRequest ? ? ?Restriction dll envoi mail
Plus de sujets relatifs à : Envoi de fichiers par sockets en VB.NET


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR