ENVOIE/RECEPTION DES FICHIERS(BASIQUE)

anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006 - 18 nov. 2005 à 19:51
ptifleur Messages postés 36 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 16 mai 2006 - 24 mai 2006 à 11:14
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/34693-envoie-reception-des-fichiers-basique

ptifleur Messages postés 36 Date d'inscription jeudi 2 mars 2006 Statut Membre Dernière intervention 16 mai 2006
24 mai 2006 à 11:14
salut ,j'adore ta source parceque étant débutant ,je peu me faire une idée sur la programmation reseau .pense tu que je pourrai envoyer des images bitmaps ou bien que fodrait il faire pour que je puisse les envoyer .

a+
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
21 nov. 2005 à 21:31
evite la redefinition de r a chaque boucle, met int r au dessus du while.
... envois moi le par mail je vais te corriger ça (regarde tes MP)
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
21 nov. 2005 à 00:14
je te remerçie MuPuf pour ton aide , mais malheureusement ça marche toujours pas (:.

serveur :
while(size > 0)
{
int r = recv(csock,buffer,256,0) ; //reception des donnees
write(file,buffer,r) ; //ecriture du buffer
size = size - r ;
memset(buffer,0,256) ;
}
client :
while(size > 0)
{
int sizet = read(file,buffer,256) ; //lecture
r = send(sock,buffer,sizet,0) ; // envoie de buffer
size = size - r ;
memset(buffer,0,256) ;
}

merçi d'avance
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
20 nov. 2005 à 18:28
Serveur : tu as fais une erreur au recv et write :
int size=recv(csock,buffer,256,0) ; //reception des donnees
write(file,buffer,size) ; //PAS DE SIZEOF BUFFER !!!!!!!!!

client :
int size = read(file,buffer,256) ; //lecture
int NbOctetsEnvoyes=send(sock,buffer,size,0) ; // envoie de buffer

Voila j'espere pour toi que ça va marcher.
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
20 nov. 2005 à 18:23
premierement ,je vous remerçi pour vos

explications :) .

je commence a baisser mes mains !! ça commence

a m'enerver !.voici les changements que j'ai fait

afin de permetre l'envoie et la reception des

fichiers binaires et au meme temps j'ai essayé de

bien simplifier le code :
/**************************************************/
-coté serveur :
1- ligne 36 : _O_BINARY au lieu de _O_TEXT
2- transfert : recv(csock,buffer,256,0) ; //reception des donnees
write(file,buffer,sizeof(buffer)) ; //ecriture du buffer
size = size - 256 ;
memset(buffer,0,256)


coté client :

1- ouverture binaires pas texte.
2- transfert : read(file,buffer,256) ; //lecture
send(sock,buffer,256,0) ; // envoie de buffer
size = size - 256 ;
memset(buffer,0,256) ;

/**************************************************/

merçi d'avance .
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
20 nov. 2005 à 04:37
Ne jamais au grand jamais utiliser strlen pour traiter du binary !! Car, lorsque tu veux envoyer un fichier BMP (par tranche de 1 ko) par exemple et que l'entête mesure 1024 bytes (c'est un exemple ! En réalité c'est 54 bytes) il va envoyer simplement envoyer la partie avant d'avoir un zéro dans le 1024, donc si l'offset 53 est 0 alors il va envoyer 54 bytes sur les 1024 qui était dû (C'est pas négligeable ! Sachant qu'un seul perdu c'est trop). Pour savoir combien de bytes qu'il faut envoyer avec send() il faut que tu fasse read et que tu reçoives le nombre d'octet qui on été lu sur les 1024 demandé (ou 256 bytes selon ton prog). Moi d'habitude j'utilise l'API Windows pour ReadFile() ... mais avec une bonne documentation sur Read c'est faisable (p-ê que c'est le retour de la fonction qui dit les bytes lus ?). Ensuite il te faut un bon protocole contenant le nom du fichier et le nombre d'octets qu'il pèse et prévois un accept ou deny en conséquence (p-ê même un file resume :) Contrairement à MSN :@) Et l'idée du checksum et bien je crois dans ce que tu veux faire c'est pas vraiment essenciel étant donné que la vérification d'erreur est automatique ... (Sauf dans un client P2P ou les fichiers diffèrent selon les sources).


A+
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
19 nov. 2005 à 18:05
Anonyme_man_in_this_world : La version 1.7 est surtout basée sur wininet, pour la 1.8 j'ai recodé la majeure partie avec winsock, il ne me reste que la suppression des fichiers sur le serveur qui est avec wininet, surrement pour la 1.9 ...

Par contre pour le p2p j'utilise seulement winsock, il est impossible d'utiliser wininet pour ce genre de transfert a par d'utiliser le protocole ftp ce qui serait bien lourdingue ...
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
19 nov. 2005 à 15:44
J'ai fait un client/serveur p2p basique (list de fichier/telechargement) et j'ai utiliser ceci (sa peut sembler sal pour certains, je comprend totalement) :

while (error >= 1)
{
errror = fread (&octet, 1, 1, filetosend);
if (error >= 1)
{
printf ("%c %c\n", &octet, octet);
if (send (GLOBAL_client_sock, &octet, 1, 0) ==
0)
{
printf
("* Client %d c\'est enfuit prematurement!\n",
GLOBAL_client_sock);
}
}
}

En verifiant en calculant le chekcsum du fichier de base et celui du fichie recu, ils sont pareil (d'ailleuir le petit procole de mon truc p2p supporte cette fonctionalité avec md5.c/md5.h)
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2005 à 15:39
send(sock,buffer,strlen(buffer),0);
J'espère que tu as changé cela aussi...
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
19 nov. 2005 à 14:28
"ouverture en lecture seule en mode txt"

brutNews >> j'ai changé le mode d'ouverture du mode

texte en mode binaire dans les deux sources mais ça

donne rien (: !
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
19 nov. 2005 à 13:19
Tu dis toi-même:
"ouverture en lecture seule en mode txt"
n'y aurait-il pas relation de cause à effet avec ton problème d'octets corrompus à la réception ?
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
19 nov. 2005 à 11:19
oui c'est trés basique.je crois(avis personnel)qu'une source

basique et claire et utile vaut mieux qu'un longe non commenté.

MuPuf >> j'ai changé le titre de la source . tu as

utilisé des fonctions de Wininet ,par contre moi je me suis servi

de Winsock.h donc c'est different.
juki_webmaster Messages postés 947 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 5 avril 2008 3
19 nov. 2005 à 10:22
Trop TROP basique... aucun protocole ,rien...
C'est a revoir.
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
19 nov. 2005 à 09:46
mdr !!!!!!!!!!!!!
J'ai deja fais ce que tu as fais, mais avec en plus la possibilitée de partager les fichier via un serveur ftp page perso ou alors un serveur http local comme easy php.

Voila le lien:
http://www.cppfrance.com/code.aspx?ID=33958

Le pire c'est que tu as choisis le meme nom que mon prog ... (qui au passage risque de passer en 1.8 today car la liste de modification est impressionnante ...)
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
19 nov. 2005 à 09:10
merçi pour ton encouragement max12 ,ça sera simpa de

ta part si tu precis les points faibles du systeme

de transfert.

j'atends avec impatience de nouveaux commentaires

et des remarques qui peuvent m'aider a envoyer les

fichiers binaires .
A+
cs_max12 Messages postés 1491 Date d'inscription dimanche 19 novembre 2000 Statut Modérateur Dernière intervention 7 juillet 2014
19 nov. 2005 à 02:20
Je m'excuse mais je trouve que c'est pas très élaboré comme système de transfert, mais c'est malgré tout commenté.

PS : Je note pas (plus), je trouve que ce genre de notation vaut rien (sans critère)
PS2 : Je t'encourage à continuer pour une version qui fonctionne multi-transfert
PS3 : Bonne prog
PS4 : A+
anonyme_man_in_this_world Messages postés 161 Date d'inscription samedi 25 juin 2005 Statut Membre Dernière intervention 1 août 2006
18 nov. 2005 à 19:51
n'hesitez pas de me signaler les bugs que vous avez remarqué dans la

source .

et n'oubliez pas que c'est ma premiere source sur cppfrance donc ...