TP 01 Sid

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

2021

Rapport de TP 01 : envoi
d’un message entre
deux
machine(client/serveur)

PC
Le code c de server :
#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <netdb.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <errno.h>

#include <string.h>

#define TAILLEBUF 20

int main(int port, char *tabp[]) {

// adresse de la socket locale

static struct sockaddr_in addr_local;

// adresse de la socket coté serveur

static struct sockaddr_in addr_client;

// identifiant du client

struct hostent *host_client;

// taille de l'addresse socket

socklen_t lg;

// descripteur de la socket locale

int sock;

// chaine à envoyer en réponse

char *reponse = "bien recu";

// buffer de réception

char buffer[TAILLEBUF];

// chaine reçue

char *chaine;

// nombre d'octets lus ou envoyés

int nb_octets;

if (port<2)

fprintf(stderr, "tu n'a pas donné une port\n");

exit(0);

// création de la socket

sock = socket(AF_INET, SOCK_DGRAM, 0);


if (sock == -1) {

perror("erreur création socket");

exit(1);

// liaison de la socket sur le port local 5000

bzero(&addr_local, sizeof(struct sockaddr_in));

addr_local.sin_family = AF_INET;

addr_local.sin_port = htons(atoi(tabp[1]));

addr_local.sin_addr.s_addr=htonl(INADDR_ANY);

if( bind(sock, (struct sockaddr*)&addr_local,

sizeof(addr_local))== -1 ) {

perror("erreur bind");

exit(1);

// attente de données venant d'un client

lg = sizeof(struct sockaddr_in);

nb_octets = recvfrom(sock, buffer, TAILLEBUF, 0,

(struct sockaddr *)&addr_client, &lg);

if (nb_octets == -1) {

perror("erreur réception paquet");

exit(1);

// affichage message reçu et coordonnées émetteur

chaine = (char *)malloc(nb_octets * sizeof(char));

memcpy(chaine, buffer, nb_octets);

printf("recu message %s sur le port %d\n", chaine, ntohs(addr_client.sin_port));

// envoi de la réponse à l'émetteur

nb_octets = sendto(sock, reponse, strlen(reponse)+1,0,(struct sockaddr*)&addr_client, lg);

if (nb_octets == -1) {

perror("erreur envoi réponse");

exit(1);

// fermeture la socket

close(sock);

Le code c de client :
#include <stdio.h>

#include <stdlib.h>

#include <unistd.h>

#include <sys/types.h>

#include <netdb.h>

#include <sys/socket.h>

#include <netinet/in.h>

#include <errno.h>

#include <string.h>

#define TAILLEBUF 20

int main(int port, char *tabp[]) {

// identifiant de la machine serveur

struct hostent *serveur_host;

// adresse de la socket coté serveur

static struct sockaddr_in addr_serveur;

// taille de l'addresse socket

socklen_t lg;

// descripteur de la socket locale

int sock;

// chaine à envoyer

char *msg = "oussama ";

// buffer de réception

char buffer[TAILLEBUF];

// chaine reçue en réponse

char *reponse;

// nombre d'octets lus ou envoyés

int nb_octets;

// création d'une socket UDP

if (port != 3)

printf("Error enter the right data\n");

exit(1);

sock = socket(AF_INET, SOCK_DGRAM, 0);

if (sock == -1) {

perror("erreur création socket");

exit(1);

}
// récupération identifiant du serveur

serveur_host = gethostbyname(tabp[1]);

if (serveur_host==NULL) {

perror("erreur adresse serveur");

exit(1);

// création adresse socket destinatrice

bzero(&addr_serveur, sizeof(struct sockaddr_in));

addr_serveur.sin_family = AF_INET;

addr_serveur.sin_port = htons(atoi(tabp[2]));

memcpy(&addr_serveur.sin_addr.s_addr,

serveur_host -> h_addr, serveur_host -> h_length);

// on envoie le message "bonjour" au serveur

lg = sizeof(struct sockaddr_in);

nb_octets = sendto(sock, msg, strlen(msg)+1, 0,

(struct sockaddr*)&addr_serveur, lg);

if (nb_octets == -1) {

perror("erreur envoi message");

exit(1); }

printf("paquet envoyé, nb_octets = %d\n",nb_octets);

// on attend la réponse du serveur

nb_octets = recvfrom(sock, buffer, TAILLEBUF, 0,

(struct sockaddr*)&addr_serveur, &lg);

if (nb_octets == -1) {

perror("erreur réponse serveur");

exit(1); }

reponse = (char *)malloc(nb_octets * sizeof(char));

memcpy(reponse, buffer, nb_octets);

printf("reponse recue du serveur : %s\n",reponse);

// on ferme la socket

close(sock);

Les captures d’ecran :


1/
2
3/

4/
5/

Vous aimerez peut-être aussi