0% ont trouvé ce document utile (0 vote)
63 vues4 pages

Communication avec Sockets UDP/TCP

Ce document décrit un TP sur la communication client-serveur utilisant des sockets UDP et TCP. Il présente les squelettes de code pour un serveur et client UDP et TCP, et demande de compléter les programmes manquants pour établir la communication entre chaque paire client-serveur.

Transféré par

Emna
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
63 vues4 pages

Communication avec Sockets UDP/TCP

Ce document décrit un TP sur la communication client-serveur utilisant des sockets UDP et TCP. Il présente les squelettes de code pour un serveur et client UDP et TCP, et demande de compléter les programmes manquants pour établir la communication entre chaque paire client-serveur.

Transféré par

Emna
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Institut Galilée 15 avril 2013

TP2 : Sockets UDP/TCP


1 Objectif du TP
Développer une communication rudimentaire entre deux processus, en adoptant une architecture de type client/serveur. La commu-
nication entre client et serveur étant basé sur l’interface de communication socket.

2 Travail à faire :
• Exercice 1 Complétez les programmes suivants pour faire communiquer un serveur et un client UDP.

1 /* serveur_UDP.c (serveur UDP) */


2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <errno.h>
5 #include <string.h>
6 #include <netinet/in.h>
7
8 char* id = 0;
9 short port = 0;
10 int sock = 0; /* socket de communication */
11 int nb_reponse = 0;
12
13 int main(int argc, char** argv) {
14 int ret;
15 struct sockaddr_in serveur; /* SAP du serveur */
16
17 if (argc!=3) {
18 fprintf(stderr,"usage: %s id port\n", argv[0]);
19 exit(1);
20 }
21 id = argv[1];
22 port = atoi(argv[2]);
23 if ((sock = socket(...............)) == -1) {
24 fprintf(stderr,"%s: socket %s\n", argv[0],strerror(errno));
25 exit(1);
26 }
27 serveur.sin_family = .......;
28 serveur.sin_port = ...........;
29 serveur.sin_addr.s_addr = ..........;
30 if (bind(............................) < 0) {
31 fprintf(stderr,"%s: bind %s\n", argv[0],strerror(errno));
32 exit(1);
33 }
34
35 while (1) {
36 struct sockaddr_in client; /* SAP du client */
37 int client_len = sizeof(client);
38 char buf_read[256], buf_write[256];
39
40 ret = recvfrom(.........................);
41
42 if (ret <= 0) {
43 printf("%s: recvfrom=%d: %s\n", argv[0],ret,strerror(errno));
44 continue;
45 }
46
47 printf("serveur %s recu le msg %s de %s:%d\n", id,buf_read,...................);
48 sprintf(buf_write, "serveur#%2s reponse%03d#", id,nb_reponse++);
49 ret = sendto(.........................);
50 if (ret <= 0) {
Institut Galilée 15 avril 2013

52 printf("%s: sendto=%d: %s\n", argv[0],ret,strerror(errno));


53 continue;
54 }
55 sleep(2);
56 }
57 return 0;
58 }

1 /* client_UDP.c (client UDP) */


2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <errno.h>
5 #include <netinet/in.h>
6 #include <string.h>
7
8 char* id = 0;
9 short sport = 0;
10 int sock = 0; /* socket de communication */
11
12 int main(int argc, char** argv) {
13 struct sockaddr_in moi; /* SAP du client */
14 struct sockaddr_in serveur; /* SAP du serveur */
15 int nb_question = 0;
16 int ret,len;
17 int serveur_len = sizeof(serveur);
18 char buf_read[256], buf_write[256];
19
20 if (argc != 4) {
21 fprintf(stderr,"usage: %s id host sport\n", argv[0]);
22 exit(1);
23 }
24 id = argv[1];
25 sport = atoi(argv[3]);
26 if ((sock = socket(...........)) == -1) {
27 fprintf(stderr,"%s: socket %s\n",argv[0],strerror(errno));
28 exit(1);
29 }
30 len = sizeof(moi);
31 getsockname(...............................);
32 serveur.sin_family = .......;
33 serveur.sin_port = ............;
34 .........................&serveur.sin_addr);
35 while (nb_question < 3) {
36 char buf_read[256], buf_write[256];
38
39 sprintf(buf_write, "#%2s=%03d",id,nb_question++);
40 printf("client %2s: (%s,%4d) envoie a ", id,............................);
41 printf("(%s,%4d): %s", ...............................);
42 ret = sendto(.........................);
43 if (ret <= 0) {
44 printf("%s: erreur dans sendto (num=%d, mess=%s)\n", argv[0],ret,strerror(errno));
45 continue;
46 }
47 len = sizeof(moi);
48 getsockname(..........................);
49 printf("client %2s: (%s,%4d) recoit de ", id,............................);
50 ret = recvfrom(....................);
51 if (ret <= 0) {
52 printf("%s: erreur dans recvfrom (num=%d, mess=%s)\n", argv[0],ret,strerror(errno));
53 continue;
54 }
55 printf("(%s,%4d) : %s\n",.................);
56 }
57 return 0;
58 }

• Exercice 2 Complétez les programmes suivants pour faire communiquer un serveur et un client TCP.
Institut Galilée 15 avril 2013

1 /* serveur_TCP.c (serveur TCP) */


2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <errno.h>
5 #include <netinet/in.h>
6 #include <string.h>
7
8 #define NBECHANGE 3
9
10 char* id = 0;
11 short port = 0;
12 int sock = 0; /* socket de communication */
13 int nb_reponse = 0;
14
15 int main(int argc, char** argv) {
16 struct sockaddr_in serveur; /* SAP du serveur */
17
18 if (argc != 3) {
19 fprintf(stderr,"usage: %s id port\n",argv[0]);
20 exit(1);
21 }
22 id = argv[1];
23 port = atoi(argv[2]);
24 if ((sock = socket(...................)) == -1) {
25 fprintf(stderr,"%s: socket %s\n", argv[0],strerror(errno));
26 exit(1);
27 }
28 serveur.sin_family = .......;
29 serveur.sin_port = ...........;
30 serveur.sin_addr.s_addr = ..........;
31 if (bind(...............................) < 0) {
32 fprintf(stderr,"%s: bind %s\n", argv[0],strerror(errno));
33 exit(1);
34 }
35 if (listen(......) != 0) {
36 fprintf(stderr,"%s: listen %s\n", argv[0],strerror(errno));
37 exit(1);
38 }
39 while (1) {
40 struct sockaddr_in client; /* SAP du client */
41 int len = sizeof(client);
42 int sock_pipe; /* socket de dialogue */
43 int ret,nb_question;
44
45 sock_pipe = accept(...........................);
46 for (nb_question = 0;nb_question < NBECHANGE; nb_question++) {
47 char buf_read[256], buf_write[256];
48
49 ret = read(.......................);
50 if (ret <= 0) {
51 printf("%s: read=%d: %s\n", argv[0], ret, strerror(errno));
52 break;
53 }
54 printf("srv %s recu de (%s,%4d):%s\n",id, ...............................);
55 sprintf(buf_write,"#%2s=%03d#", id,nb_reponse++);
56 ret = write(..........................);
57 if (ret <= 0) {
58 printf("%s: write=%d: %s\n", argv[0], ret, strerror(errno));
59 break;
60 }
61 sleep(2);
62 }
63 close(sock_pipe);
64 }
65 return 0;
66 }
Institut Galilée 15 avril 2013

1 /* client_TCP.c (client TCP) */


2 #include <stdlib.h>
3 #include <stdio.h>
4 #include <errno.h>
5 #include <netinet/in.h>
6 #include <string.h>
7
8 #define NBECHANGE 3
9
10 char* id = 0;
11 short sport = 0;
12 int sock = 0; /* socket de communication */
13
14 int main(int argc, char** argv) {
15 struct sockaddr_in moi; /* SAP du client */
16 struct sockaddr_in serveur; /* SAP du serveur */
17 int nb_question = 0;
18 int ret,len;
19
20 if (argc != 4) {
21 fprintf(stderr,"usage: %s id serveur port\n",argv[0]);
22 exit(1);
23 }
24 id = argv[1];
25 sport = atoi(argv[3]);
26 if ((sock = socket(...........)) == -1) {
27 fprintf(stderr,"%s: socket %s\n", argv[0],strerror(errno));
28 exit(1);
29 }
30 serveur.sin_family = AF_INET;
31 serveur.sin_port = htons(sport);
32 inet_aton(...............................);
33 if (connect(..................... ) < 0) {
34 fprintf(stderr,"%s: connect %s\n", argv[0],strerror(errno));
35 perror("bind");
36 exit(1);
37 }
38 len = sizeof(moi);
39 getsockname(.............................);
40 for (nb_question = 0; nb_question < NBECHANGE; nb_question++) {
41 char buf_read[256], buf_write[256];
42
43 sprintf(buf_write,"#%2s=%03d",id,nb_question);
44 printf("client %2s: (%s,%4d) envoie a ",id,.................................);
45 printf(" (%s,%4d) : %s\n",...............);
46 ret = write(................................);
47 if (ret <= strlen(buf_write)) {
48 printf("%s: erreur dans write (num=%d, mess=%s)\n",argv[0],ret,strerror(errno));
49 continue;
51 }
52 printf("client %2s: (%s,%4d) recoit de ", id,..............................);
53 ret = read(..................);
54 if (ret <= 0) {
55 printf("%s:erreur dans read (num=%d,mess=%s)\n", argv[0],ret,strerror(errno));
56 continue;
57 }
58 printf("(%s,%4d):%s\n",inet_ntoa(serveur.sin_addr), ntohs(serveur.sin_port),buf_read);
59 }
60 close(sock);
61 return 0;
62 }

Vous aimerez peut-être aussi