Nom:rouaz
Prenom:sarah
Spécialité: m2 resin
Client:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
int client_socket = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(12345); // Port à utiliser, peut être modifié
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // Adresse IP du serveur1
connect(client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr));
// Envoyer une requête au serveur1
char request[] = "Demande de traitement";
send(client_socket, request, sizeof(request), 0);
// Recevoir la réponse du serveur1
char response[1024];
recv(client_socket, response, sizeof(response), 0);
printf("Réponse du serveur1 : %s\n", response);
close(client_socket);
return 0;
Serveur1:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
int server1_socket = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server1_addr
server1_addr.sin_family = AF_INET;
server1_addr.sin_port = htons(12345); // Port à utiliser, peut être modifié
server1_addr.sin_addr.s_addr = INADDR_ANY;
bind(server1_socket, (struct sockaddr*)&server1_addr, sizeof(server1_addr));
listen(server1_socket, 5);
int client_socket = accept(server1_socket, NULL, NULL);
// Recevoir la requête du client
char request[1024];
recv(client_socket, request, sizeof(request), 0);
printf("Requête reçue du client : %s\n", request);
// Contacter le serveur2 en utilisant UDP
int udp_socket = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in server2_addr;
server2_addr.sin_family = AF_INET;
server2_addr.sin_port = htons(54321); // Port utilisé par le serveur2, peut être modifié
server2_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); // Adresse IP du serveur2, à modifier
selon votre configuration
// Contacter le serveur2 en utilisant UDP
sendto(udp_socket, request, sizeof(request), 0, (struct sockaddr*)&server2_addr,
sizeof(server2_addr));
// Recevoir la réponse du serveur2 en utilisant UDP
char response_udp[1024];
recvfrom(udp_socket, response_udp, sizeof(response_udp), 0, NULL, NULL);
printf("Réponse du serveur2 reçue : %s\n", response_udp);
// Envoyer la réponse au client
send(client_socket, response_udp, sizeof(response_udp), 0);
// Fermer les sockets
close(udp_socket);
close(server1_socket);
close(client_socket);
return 0;
Serveur2:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
int main() {
int server2_socket = socket(AF_INET, SOCK_DGRAM, 0);
struct sockaddr_in server2_addr;
server2_addr.sin_family = AF_INET;
server2_addr.sin_port = htons(54321); // Port à utiliser, peut être modifié
server2_addr.sin_addr.s_addr = INADDR_ANY;
bind(server2_socket, (struct sockaddr*)&server2_addr, sizeof(server2_addr));
// Attendre la requête du serveur1 en utilisant UDP
char request[1024];
struct sockaddr_in server1_addr;
socklen_t addr_len = sizeof(server1_addr);
recvfrom(server2_socket, request, sizeof(request), 0, (struct sockaddr*)&server1_addr,
&addr_len);
printf("Requête reçue du serveur1 via UDP : %s\n", request);
// Traiter la requête
strcpy(buffer, "Traitement effectué par serveur2");
// Envoyer la réponse au serveur1 via UDP
char response[] = "Réponse du serveur2";
sendto(server2_socket, response, sizeof(response), 0, (struct sockaddr*)&server1_addr,
sizeof(server1_addr));
// Fermer le socket UDP
close(server2_socket);
return 0;