TP1 SD Inf3

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 2

Faculté des Sciences Exactes et Appliquées INF3

Cours de Systèmes distribués

Travaux pratiques – Fiche 1


Le but de ce TP est de mettre en œuvre les sockets.

1. Le code suivant permet de créer une socket cliente. Essayer de comprendre le code, le
saisir , le compiler et l’exécuter. Avec la commande nc ou netstat retrouvé le port
utilisé.
/* Client pour les sockets
* socket_client ip_server port
*/

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char** argv )


{
int sockfd,newsockfd,clilen,chilpid,ok,nleft,nbwriten;
char c;
struct sockaddr_in cli_addr,serv_addr;

if (argc!=3) {printf ("usage socket_client server port\n");exit(0);}

/*
* partie client
*/
printf ("client starting\n");

/* initialise la structure de donnee */


bzero((char*) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr(argv[1]);
serv_addr.sin_port = htons(atoi(argv[2]));

/* ouvre le socket */
if ((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
{printf("socket error\n");exit(0);}

/* effectue la connection */
if (connect(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{printf("socket error\n");exit(0);}

/* repete dans le socket tout ce qu'il entend */


while (1) {c=getchar();write (sockfd,&c,1);}

/* attention il s'agit d'une boucle infinie


* le socket n'est jamais ferme !
*/

return 1;

}
1. Le code suivant permet de créer une socket Serveur. Essayer de comprendre le code,
le saisir , le compiler et l’exécuter. Avec la commande nc ou netstat retrouvé le port
utilisé.
/* Serveur sockets TCP
* affichage de ce qui arrive sur la socket
* socket_server port (port > 1024 sauf root)
*/

#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char** argv )


{ char datas[] = "hello\n";
int sockfd,newsockfd,clilen,chilpid,ok,nleft,nbwriten;
char c;
struct sockaddr_in cli_addr,serv_addr;

if (argc!=2) {printf ("usage: socket_server port\n");exit(0);}

printf ("server starting...\n");

/* ouverture du socket */
sockfd = socket (AF_INET,SOCK_STREAM,0);
if (sockfd<0) {printf ("impossible d'ouvrir le socket\n");exit(0);}

/* initialisation des parametres */


bzero((char*) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
serv_addr.sin_port = htons(atoi(argv[1]));

/* effecture le bind */
if (bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{printf ("impossible de faire le bind\n");exit(0);}

/* petit initialisation */
listen(sockfd,1);

/* attend la connection d'un client */


clilen = sizeof (cli_addr);
newsockfd = accept (sockfd,(struct sockaddr*) &cli_addr, &clilen);
if (newsockfd<0) {printf ("accept error\n"); exit(0);}
printf ("connection accepted\n");

while (1)
{ while (read(newsockfd,&c,1)!=1);
printf("%c",c);
}

/* attention il s'agit d'une boucle infinie


* le socket nn'est jamais ferme !
*/

return 1;
}

3 Que font les deux programmes ? Tester sur la même machine puis sur deux machines.

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy