anonyme_man_in_this_world
Messages postés161Date d'inscriptionsamedi 25 juin 2005StatutMembreDernière intervention 1 août 2006
-
18 nov. 2005 à 19:51
ptifleur
Messages postés36Date d'inscriptionjeudi 2 mars 2006StatutMembreDernière intervention16 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.
ptifleur
Messages postés36Date d'inscriptionjeudi 2 mars 2006StatutMembreDernière intervention16 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és536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 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és161Date d'inscriptionsamedi 25 juin 2005StatutMembreDerniè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és536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 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és161Date d'inscriptionsamedi 25 juin 2005StatutMembreDerniè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)
cs_max12
Messages postés1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDerniè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és536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 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és947Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention 5 avril 20083 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) :
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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és161Date d'inscriptionsamedi 25 juin 2005StatutMembreDerniè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és21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 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és161Date d'inscriptionsamedi 25 juin 2005StatutMembreDerniè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és947Date d'inscriptionmercredi 19 novembre 2003StatutMembreDernière intervention 5 avril 20083 19 nov. 2005 à 10:22
Trop TROP basique... aucun protocole ,rien...
C'est a revoir.
MuPuF
Messages postés536Date d'inscriptionmercredi 27 avril 2005StatutMembreDernière intervention22 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.
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és161Date d'inscriptionsamedi 25 juin 2005StatutMembreDerniè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és1491Date d'inscriptiondimanche 19 novembre 2000StatutModérateurDerniè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és161Date d'inscriptionsamedi 25 juin 2005StatutMembreDerniè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 ...
24 mai 2006 à 11:14
a+
21 nov. 2005 à 21:31
... envois moi le par mail je vais te corriger ça (regarde tes MP)
21 nov. 2005 à 00:14
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
20 nov. 2005 à 18:28
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.
20 nov. 2005 à 18:23
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 .
20 nov. 2005 à 04:37
A+
19 nov. 2005 à 18:05
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 ...
19 nov. 2005 à 15:44
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)
19 nov. 2005 à 15:39
J'espère que tu as changé cela aussi...
19 nov. 2005 à 14:28
brutNews >> j'ai changé le mode d'ouverture du mode
texte en mode binaire dans les deux sources mais ça
donne rien (: !
19 nov. 2005 à 13:19
"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 ?
19 nov. 2005 à 11:19
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.
19 nov. 2005 à 10:22
C'est a revoir.
19 nov. 2005 à 09:46
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 ...)
19 nov. 2005 à 09:10
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+
19 nov. 2005 à 02:20
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+
18 nov. 2005 à 19:51
source .
et n'oubliez pas que c'est ma premiere source sur cppfrance donc ...