Bonjour à tous
Je dois développer un programme permettant la création d'un serveur et d'un client depuisla connxeion entre les deux et établir une discussion. J'ai déja le serveur et le client qui tourne bien mais jene sais pas comment faire la discusion entre. Voici mon serveur et mon client
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
58
59
60
61 #include <stdio.h> #include <errno.h> #include <signal.h> #include <netdb.h> #include <netinet/in.h> #include <sys/socket.h> #define SERVEURNAME "127.0.0.1" int to_server_socket = -1; void main ( void ) { char *server_name = SERVEURNAME; struct sockaddr_in serverSockAddr; struct hostent *serverHostEnt; long hostAddr; long status; char buffer[512]; bzero(&serverSockAddr,sizeof(serverSockAddr)); hostAddr = inet_addr(SERVEURNAME); if ( (long)hostAddr != (long)-1) bcopy(&hostAddr,&serverSockAddr.sin_addr,sizeof(hostAddr)); else { serverHostEnt = gethostbyname(SERVEURNAME); if (serverHostEnt == NULL) { printf("ca chie gethost\n"); exit(0); } bcopy(serverHostEnt->h_addr,&serverSockAddr.sin_addr,serverHostEnt->h_length); } serverSockAddr.sin_port = htons(30000); serverSockAddr.sin_family = AF_INET; /* creation de la socket */ if ( (to_server_socket = socket(AF_INET,SOCK_STREAM,0)) < 0) { printf("ca chie creation socket client\n"); exit(0); } /* requete de connexion */ if(connect( to_server_socket, (struct sockaddr *)&serverSockAddr, sizeof(serverSockAddr)) < 0 ) { printf("ca chie demande de connection\n"); exit(0); } /* envoie de donne et reception */ write(to_server_socket,"Toto",4); read(to_server_socket,buffer,512); printf(buffer); /* fermeture de la connection */ shutdown(to_server_socket,2); close(to_server_socket); }
SERVEUR
quelques lignes ajouté aux deux programmes pour permettre une discussion entre le client et le 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 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <signal.h> void fin (int i); void appli(int no_client_socket); char buffer[512]; int ma_socket; void main ( void ) { int client_socket; struct sockaddr_in mon_address, client_address; int mon_address_longueur, lg; bzero(&mon_address,sizeof(mon_address)); mon_address.sin_port = htons(30000); mon_address.sin_family = AF_INET; mon_address.sin_addr.s_addr = htonl(INADDR_ANY); /* creation de socket */ if ((ma_socket = socket(AF_INET,SOCK_STREAM,0))== -1) { printf("ca chie avec la creation\n"); exit(0); } signal(SIGINT,fin); /* bind serveur - socket */ bind(ma_socket,(struct sockaddr *)&mon_address,sizeof(mon_address)); /* ecoute sur la socket */ listen(ma_socket,5); /* accept la connexion */ mon_address_longueur = sizeof(client_address); while(1) { client_socket = accept(ma_socket, (struct sockaddr *)&client_address, &mon_address_longueur); if (fork() == 0) { close(ma_socket); lg = read(client_socket,buffer, 512); printf("le serveur a recu: %s\n",buffer); sprintf(buffer,"%s du serveur",buffer); write(client_socket,buffer, 512); shutdown(client_socket,2); close(client_socket); exit(0); } } shutdown(ma_socket,2); close(ma_socket); } void appli(int no_client_socket) { printf("ici le serveur\n"); } void fin(int i) { shutdown(ma_socket,2); close(ma_socket); }
mici
Partager