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);
}
 
 
}