0% ont trouvé ce document utile (0 vote)
21 vues6 pages

Serveur et client TCP en C

Le document présente un code C pour un serveur et un client utilisant des sockets TCP. Le serveur écoute sur le port 12345, accepte les connexions des clients, reçoit des messages et les renvoie (fonction d'écho) jusqu'à ce que le client choisisse de quitter. Le client se connecte au serveur, envoie des messages et peut également décider de se déconnecter en envoyant 'non'.

Transféré par

Wilfreed Dongmo
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 DOCX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues6 pages

Serveur et client TCP en C

Le document présente un code C pour un serveur et un client utilisant des sockets TCP. Le serveur écoute sur le port 12345, accepte les connexions des clients, reçoit des messages et les renvoie (fonction d'écho) jusqu'à ce que le client choisisse de quitter. Le client se connecte au serveur, envoie des messages et peut également décider de se déconnecter en envoyant 'non'.

Transféré par

Wilfreed Dongmo
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 DOCX, PDF, TXT ou lisez en ligne sur Scribd

#include <stdio.

h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#define PORT 12345 // Définition du port du serveur

int main() {

int server_fd, new_socket, valread;

struct sockaddr_in address;

char buffer[1024] = {0}; // Buffer pour stocker les messages reçus

// Création du socket

if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) {

perror("Erreur de création du socket");

exit(EXIT_FAILURE);

// Configuration de l'adresse du serveur

address.sin_family = AF_INET;

address.sin_addr.s_addr = INADDR_ANY; // Accepte toutes les connexions

address.sin_port = htons(PORT); // Conversion du port en format réseau

// Liaison du socket à l'adresse et au port

if (bind(server_fd, (struct sockaddr *)&address, sizeof(address)) < 0) {

perror("Échec du bind");

exit(EXIT_FAILURE);

}
// Mise en écoute du serveur

if (listen(server_fd, 3) < 0) {

perror("Échec de l'écoute");

exit(EXIT_FAILURE);

printf("En attente de connexions...\n");

// Acceptation d'un client

if ((new_socket = accept(server_fd, NULL, NULL)) < 0) {

perror("Échec de l'acceptation");

exit(EXIT_FAILURE);

printf("Client connecté\n");

// Boucle principale pour recevoir et renvoyer les messages

while (1) {

valread = recv(new_socket, buffer, 1024, 0);

if (valread <= 0) { // Vérifie si le client a quitté

printf("Connexion fermée par le client.\n");

break;

buffer[valread] = '\0'; // Ajout du terminateur de chaîne

printf("Message reçu: %s\n", buffer);

// Vérifier si le client veut quitter


if (strcmp(buffer, "non") == 0) {

printf("Le client a choisi de quitter. Fermeture de la connexion.\n");

break;

// Renvoyer le même message au client (Echo)

send(new_socket, buffer, valread, 0);

memset(buffer, 0, sizeof(buffer)); // Nettoyage du buffer

// Fermeture des sockets

close(new_socket);

close(server_fd);

return 0;

//Client#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#define PORT 12345 // Port du serveur

#define SERVER_IP "127.0.0.1" // Adresse IP du serveur (localhost)

int main() {

int sock;
struct sockaddr_in serv_addr;

char buffer[1024] = {0}; // Buffer pour recevoir la réponse du serveur

char message[1024]; // Message à envoyer

char reponse[10]; // Réponse de l'utilisateur ("oui" ou "non")

// Création du socket

if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) {

perror("Erreur de création du socket");

return -1;

// Configuration de l'adresse du serveur

serv_addr.sin_family = AF_INET;

serv_addr.sin_port = htons(PORT);

// Conversion de l'adresse IP en format réseau

if (inet_pton(AF_INET, SERVER_IP, &serv_addr.sin_addr) <= 0) {

perror("Adresse invalide ou non supportée");

return -1;

// Connexion au serveur

if (connect(sock, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {

perror("Échec de la connexion");

return -1;

while (1) { // Boucle principale pour envoyer des messages

// Demander à l'utilisateur d'entrer un message


printf("Entrez un message : ");

fgets(message, sizeof(message), stdin);

message[strcspn(message, "\n")] = 0; // Supprimer le retour à la ligne

// Envoyer le message au serveur

send(sock, message, strlen(message), 0);

// Lire la réponse du serveur

int valread = read(sock, buffer, 1024);

buffer[valread] = '\0';

printf("Réponse du serveur: %s\n", buffer);

memset(buffer, 0, sizeof(buffer)); // Nettoyage du buffer

// Demander si l'utilisateur veut continuer ou quitter

printf("Voulez-vous continuer ? (oui/non) : ");

fgets(reponse, sizeof(reponse), stdin);

reponse[strcspn(reponse, "\n")] = 0; // Supprimer le retour à la ligne

if (strcmp(reponse, "non") == 0) { // Si l'utilisateur veut quitter

send(sock, "non", strlen("non"), 0); // Informer le serveur

printf("Vous avez choisi de quitter. Fermeture du client.\n");

break;

// Fermeture du socket client

close(sock);

return 0;
}

//Compilation

gcc -o server serveur.c

gcc -o client client.c

//Lancement du serveur et client.

./server

Vous aimerez peut-être aussi