Bonjour,
après pas mal de recherche sur le net, je ne trouve rien sur l´envoi de fichier par socket. Pour l´instant j´ai 2 scripts ,1 coté serveur et l´autre coté client, et je peux simplement envoyer des messages du client vers le serveur.
Pourriez vous m´aider svp ? mes connaissances en socket sont assez limités, ce sont des scripts déja faits ...![]()
Pour ceux que cela intéresse:
CLIENT:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 #include <stdio.h> /* E/S standard: gets, printf, etc. #include <string.h> /* strlen etc. , memcpy #include <sys/types.h> /* Divers designateurs de type #include <sys/socket.h> /* Sockets en general #include <netinet/in.h> /* Sockets du domaine Internet #include <netdb.h> /* hostent, gethostbyname, gethostbyaddr /**************************************************************************/ #define nomhoteserveur "PC_Distant" #define portserveur 11111 struct sockaddr_in adrserveur; /* Adresse du serveur */ struct sockaddr_in adrclient; /* Adresse du client */ int s; /* Numero socket */ char message[100]; /* Tampon Donnees niveau application */ struct hostent *h; /************************************************* *************************/ void main() { /******************** CREATION DE LA SOCKET *****************************/ if ( (s=socket(AF_INET,SOCK_STREAM,6)) == -1) /* 6 = numero protocole TCP*/ { printf(">>> %s\n\n" , "Creation socket impossible" ); exit(1); } /************** INITIALISATION DE L´ADRESSE DU SERVEUR ***************/ adrserveur.sin_family = AF_INET; if ( (h=gethostbyname(nomhoteserveur)) == NULL ) { printf("\n>>> %s\n\n" , "Nom hote serveur inconnu" ); exit(1); } memcpy ( &adrserveur.sin_addr , h->h_addr , h->h_length ); adrserveur.sin_port = portserveur; /******** DEMANDE DE CONNEXION ********************************************/ if (connect(s,(struct sockaddr*) &adrserveur,sizeof(adrserveur)) == -1) { printf("\n>>> %s\n\n" , "Connexion au serveur impossible" ); exit(1); } /******** EMISSION DU MESSAGE (bind automatique) ************************/ while (1) /* Boucle sans fin, arret par control-C */ { printf("|Message: " ); gets(message); /* lit une ligne, scanf ne lit qu´un mot */ if (write(s,message,strlen(message)+1) == -1) { printf("\n>>> %s\n\n" , "Emission du message impossible" ); exit(1); } } exit(0); }
SERVEUR:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 /**************************************************************************/ /* Fichiers include <....>: consultables par pg ou cat dans /usr/include */ #include <stdio.h> /* E/S standard: gets, printf, etc. */ #include <string.h> /* strlen etc. , memcpy */ #include <sys/types.h> /* Divers designateurs de type */ #include <sys/socket.h> /* Sockets en general */ #include <netinet/in.h> /* Sockets du domaine Internet */ #include <netdb.h> /* hostent, gethostbyname, gethostbyaddr /**************************************************************************/ #define portserveur 11111 struct sockaddr_in adrserveur; /* Adresse serveur */ struct sockaddr_in adrclient; /* Adresse client */ int lgadrclient = sizeof(adrclient); int s; /* Numero socket */ int cli_sock; /* Numero socket client */ int n; /* Nombre de caracteres lus */ char message[100]; /* Tampon reception niveau application*/ struct hostent *h; /************************************************* *************************/ void main () { /*********************** CREATION DE LA SOCKET D´IDENTIFIANT s **********/ if ( (s=socket(AF_INET,SOCK_STREAM,6)) == -1 ) { printf("\n>>> %s\n\n" , "Creation socket impossible" ); exit(1); } /*********** LIEN DE LA SOCKET s A L´ADRESSE DU SERVEUR ******************/ adrserveur.sin_family = AF_INET; adrserveur.sin_addr.s_addr = 0; /* 0.0.0.0 <---> adresse locale */ adrserveur.sin_port = portserveur; if ( bind(s,(struct sockaddr*) &adrserveur,sizeof(adrserveur)) == -1 ) { printf("\n>>> %s\n\n" , "Lien de la socket a l´adresse impossible" ); exit(1); } /******** PASSAGE DE LA SOCKET EN ECOUTE PASSIVE *************************/ printf("Attente de connexion \n" ); /*pause(2);*/ listen(s,10); /******** ACCEPTATION DE CONNEXION ***************************************/ lgadrclient = sizeof(adrclient); cli_sock = accept(s,(struct sockaddr*) &adrclient,&lgadrclient); printf("Connexion etablie par le client:\n" ); if ( (h=gethostbyaddr((char *) &adrclient.sin_addr.s_addr, sizeof(adrclient.sin_addr.s_addr),AF_INET)) == NULL) { printf("\n>>> %s\n\n" , "Nom hote client inconnu" ); exit(1); } printf("|| %s %d\n" , h->h_name , adrclient.sin_port ); /******** RECEPTION ET AFFICHAGE DES MESSAGES *************** ***********/ while (1) { n = read(cli_sock,message,sizeof(message)); if ( n == -1 ) { printf("\n>>> %s\n\n" , "Lecture du message impossible" ); exit(1); } printf("|| Client: %s %d\n" , h->h_name , adrclient.sin_port ); printf("|| message: %s\n\n" , message); } }
Partager