Transfert de fichier

cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006
- 8 févr. 2006 à 17:23
yoyo269
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
- 11 févr. 2006 à 08:16
bonjour,



j'ai effectué un serveur client qui permet de transferer des image jpg,
dans mon cas je doit saisir le nom de l'image ( par exemple :
image_voiture ) pour que le client la recoive, mais j'aimerai recevoir
cette image automatiquement, c'est a dir que qquand le client ce
connecte au serveur, je voudrai recevoir cette image,donc si quelqu'un
pourrait m'aider ca serait sympa de votre part, voici mon code :



/*SERVEUR TRANSFERT IMAGE */



#include <sys/types.h>


#include <sys/socket.h>


#include <netinet/in.h>


#include <signal.h>


#include <stdio.h>


#include <string.h>

#include <stdlib.h>


#include <signal.h>

#include


int connexion;




/* Fonction activée par la touche Ctrl c , signal SIGINT*/


void fin()


{close(connexion);


printf("fin du processus serveur!\n");


exit(0);


}




int main()


{


int taille,lecture,N;


struct sockaddr_in sock;


struct sockaddr_in sockclient ;


char tampon[100], NomFich[100];


int connexion_service;

FILE *fich ;




signal(SIGINT,fin) ;


/* descripteur de socket */


if ( (connexion = socket(AF_INET,SOCK_STREAM,0) )== -1)


{ perror("erreur socket");


exit(1);


}


sock.sin_family = AF_INET;


sock.sin_addr.s_addr = INADDR_ANY;


sock.sin_port = htons(5000);




if ( bind(connexion,(struct sockaddr *)&sock, sizeof sock ) == -1)


{ perror("erreur bind");


exit(1);


}




/* accepte les demandes de connexion */


listen(connexion,5);


signal(SIGINT,fin);





while(1)


{


taille = sizeof ( sockclient );


puts("attente de connexion");


if ((connexion_service = accept(connexion,(struct sockaddr *)&sockclient,(socklen_t *)&taille) )==-1)


{ perror("erreur accept");


exit(1);


}


puts("Serveur : connexion etablie");


if (fork()==0)



{ /* programme fils */


lecture = read(connexion_service,NomFich,100);


if(lecture == 0) /* retourne 0 si le client exécute close */


{ close(connexion_service);


puts("socket fermee par client");


exit(1); /* le fils se termine*/


}


if (lecture < 0)


{ perror("erreur lecture");


exit(1);


}


tampon[lecture] = 0x00;


printf("Donnees client : %s\n",NomFich);

if ( (fich = fopen(NomFich,"rb") ) != NULL)

{

strcpy(tampon,"OK") ;

write(connexion_service,tampon,strlen(tampon));

sleep(1) ;


while ( (N = fread(tampon, sizeof( char), 100, fich) ) != 0)

write(connexion_service,tampon,N);

fclose(fich) ;

close(connexion_service) ;

}

else { strcpy(tampon,"NOTOK") ;

write(connexion_service,tampon,strlen(tampon));

close(connexion_service) ;

}

exit(0) ;


} /* fin du programme fils */


close(connexion_service);


puts("pere : socket service fermee");


}


}






____________________________________________________________________



/*CLIENT TRANSFERT IMAGE */



#include <sys/socket.h>

#include <netinet/in.h>

#include

#include

#include <stdio.h>

#include <string.h>

#include <stdlib.h>



int main() {

int connexion , n ;

int longueur ;

struct sockaddr_in addr;

char recu[100] , NomFich[50];

FILE *fich ;

/* Obtention du descripteur de socket */

connexion = socket ( AF_INET, SOCK_STREAM , 0 );

if ( connexion ==-1 )

{ perror ("erreur création socket");

exit(1);}



/* Remplissage de la structure addr */

addr.sin_family = AF_INET ;

addr.sin_port = htons (5000) ;

addr.sin_addr.s_addr = inet_addr("192.168.0.6") ;



longueur = sizeof(addr) ;



/* Tentative de connexion */

if ( connect ( connexion , (struct sockaddr *)&addr , longueur) == -1 )

{perror ("erreur de connexion") ;

close(connexion) ;

exit(1);

}

/* Suite à compléter : transfert de données avec le serveur */

/*Saisie du nom du fichier à demander*/

printf("Taper le nom du fichier demande : \n");

gets(NomFich) ;



write(connexion, NomFich, strlen(NomFich)+1 );

printf("demande envoye\n");



n = read(connexion, recu, 100) ;

recu[n] = 0 ;

printf("Recu : %s\n", recu) ;

if ( strcmp("NOTOK", recu) == 0)

{ printf("Fichier non trouve\n");

close(connexion) ;

exit(0) ;

}

/*Réception du fichier demandé*/

if ( strcmp("OK", recu) == 0)

{



if ( (fich = fopen("cpy_image","wb+")) != NULL)

{

while ( (n=read(connexion, recu, 100) ) > 0)

{

fwrite(recu, sizeof(char), n, fich);

recu[n] = 0 ;

}

fclose(fich) ;

}

else printf("erreur fichier") ;

}



close(connexion) ;

return 0 ;

}

13 réponses

cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

8 févr. 2006 à 17:44
je voudrai savoir si c'est possible de se connecter a un serveur sans entrer son ip, par exeple si il a 2 serveur sur le reseau le client se connecte au 2
0
wxccxw
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

8 févr. 2006 à 19:16
c'est la 3 e fois que tu pose la question :)
je pense qu'il est posible de connecter si les ordi sont brancher a un switch/router
0
cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

8 févr. 2006 à 19:35
dans mon cas jsuis en reseau local mais je ne sai spas commen faire
0
wxccxw
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

8 févr. 2006 à 20:36
recherche sur le site, sur dev.winsysdev.com et c.developpez.com
voila :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

8 févr. 2006 à 20:46
tu peu me doner un lien
0
wxccxw
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

8 févr. 2006 à 21:15
je sais pas il y a plein de code :) pour balancer sur un reseau
c'est toujours les meme IP tu te connect a
192,168,0,2 pour le premier ,3 pour le 2e et ,pour le 3e etc....
0
cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

8 févr. 2006 à 21:18
oue meme dans mon cas je ne connai pas ladresse du serveur aukelle je me connecter, je voudrai faire en sort que des ke le client cherche un serveur, le serveur lui envoi son ip et ensuite il peut se conecter, mis je ne sais pas comment faire
0
wxccxw
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

8 févr. 2006 à 21:29
alors la tu cherche la compliquation :)
0
cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

8 févr. 2006 à 21:59
commen fair alor, moi c'est un exo donc jpeu pa changer lenoncé
0
cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

8 févr. 2006 à 22:02
je voudrai : Envoyer un paquet UDP en BroadCast
pour demander aux serveurs de se signaler par retour du courrier, puis
se connecter aux serveurs qui auront répondu. Meme je ne sais pas le
code kil fau effectué et a kel nivo
0
yoyo269
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
10 févr. 2006 à 19:47
Il suffit de préciser la bonne IP pour le client qui cherche à se
connecter.Tu crées un socket en UDP, tu lui fais balancer sur le réseau
comme quoi il veut se connecter (avec une adresse IP broadcast) et une
fois que t'as la réponse, tu récupères l'ip du(des) serveur(s) qui
t'ont répondu, et tu t'y connectes.

Voilà en gros ce que je pense que tu dois faire.


YOYO, @+.
YOYO
0
cs_doberman7578
Messages postés
46
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
1 mars 2006

10 févr. 2006 à 21:22
oui c ca que je dois faire, mais pourrai tu me faire voir le code stp
0
yoyo269
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
11 févr. 2006 à 08:16
Pour le code faut que tu cherches un peu sinon t'apprendras jamais rien.Le site est plein de tout ce qu'il te faut.

Un petit conseil, décompose ton projet en différentes étapes, par exemple utilisation de l'UDP etc...


YOYO, @+.
YOYO
0