Calculatrice UDP serveur

Calculatrice UDP serveur

by Daoui Bouhafs -
Number of replies: 5
#include <sys/socket.h>
#include <sys/types.h>
#include <net inet/in.h>
#include <stdlib.h>
#include <string.h>
int main (intargc, char argv)
int a,b,Res;
char op;
int s= Socket(AF-INET,SOCK-DGRAM,0);
Struct sock ADDR-in serv,client;
serv.sin-family=af-inet;
serv.sin-port =atoi(ARGV[1]);
serv.sin-addr.S-addr =INADDR-ANY;
if (bind(s,&serv,sizeof [serv])==-1)
{
perror ("bind");
exit(-1)}
while (1) {
recv from (S,&a,sizeof(a),0,& client,sizeof(client));
recv from (S,&b,sizeof(a),0,& client,sizeof(client));
recv from (S,&op,sizeof(a),0,& client,sizeof(client));
if (op='+') res=a+b;
else if (op='-') res=a-b;
else if (op='*') res=a+b;
else if (op='/') res=a+b;
send to (S,&Res ,sizeof (Res),0&client,&sizeof (client)
}
close (s)
return 0;
}
In reply to Daoui Bouhafs

Re: Calculatrice UDP serveur

by Nour Elhouda DJELLOULI -
1)#include 'netinet/in.h'
2)int main (intargc, char argv) corection int main (intargc, char**argv)
3) int s= Socket(AF-INET,SOCK-DGRAM,0); corection int s= Socket(AF_INET,SOCK_DGRAM,0);
4)Struct sock ADDR-in serv,client; corection Struct sock addr-in serv,client;
5)serv.sin-family=af-inet; corection serv.sin-family=AF_INET;
6)serv.sin-port =atoi(ARGV[1]); corection serv.sin-port =atoi(argv[1]);
recv from (S,&a,sizeof(a),0,& client,sizeof(client)); corection recvfrom (S,&a,sizeof(a),0,& client,sizeof(client));
recv from (S,&b,sizeof(a),0,& client,sizeof(client)); corection recvfrom (S,&b,sizeof(b),0,& client,sizeof(client));
recv from (S,&op,sizeof(a),0,& client,sizeof(client));corection recv from (S,&op,sizeof(op),0,& client,sizeof(client));
else if (op='*') res=a+b; res=a*b;
else if (op='/') res=a+b; res=a/b;
In reply to Nour Elhouda DJELLOULI

Re: Calculatrice UDP serveur

by KELTOUMA BOUACHRIA -
Ajout de pour printf
Ajout de la vérification de la division par zéro.
if (op == '/') {
if (b != 0)
res = a / b;
else {
printf("Division by zero!\n");
}
Ajout dans le cas ou les opérateurs est invalides.
else {
printf("Invalid operator!\n");
}
In reply to Daoui Bouhafs

Re: Calculatrice UDP serveur

by FATIMA MORADJI -
int main (intargc, char**argv);
Socket(AF_INET,SOCK_DGRAM,0);
serv.sin-family=AF_INET;
serv.sin-port =atoi(argv[1]);
In reply to FATIMA MORADJI

Re: Calculatrice UDP serveur

by Daoui Bouhafs -
correction de code
#include <sys/socket.h>
 #include <sys/types.h>
 #include <netinet/in.h>
 #include <stdlib.h>
 #include <string.h>
 int main (intargc, char**argv)
int a,b,Res;
char op;
int s= Socket(AF_INET,SOCK_DGRAM,0);
Struct sock addr-in serv,client;
serv.sin-family=AF_INET;
serv.sin-port =atoi(argv[1]);
serv.sin-addr.S-addr =INADDR-ANY;
if (bind(s,&serv,sizeof [serv])==-1)
{
perror ("bind");
exit(-1)}
while (1) {
recvfrom (S,&a,sizeof(a),0,& client,sizeof(client));
recvfrom (S,&b,sizeof(b),0,& client,sizeof(client));
recvfrom (S,&op,sizeof(op),0,& client,sizeof(client));
if (op='+') res=a+b;
else if (op='-')res=a-b;
else if (op='*') res=a*b;
else if (op='/')res=a /b;
send to (S,&Res ,sizeof (Res),0&client,&sizeof (client)
}
close (s)
return 0;
}
In reply to Daoui Bouhafs

Re: Calculatrice UDP serveur

by hami mokhtar -
voila la correction du code
#include #include #include #include #include #include #include // Pour inet_ntoa()

#define TAILLE_TAMPON 1024

int main(int argc, char* argv[]) {
if (argc != 2) {
fprintf(stderr, "Utilisation : %s \n", argv[0]);
exit(1);
}

int port = atoi(argv[1]);

// Création d'un socket UDP
int s = socket(AF_INET, SOCK_DGRAM, 0);
if (s == -1) {
perror("socket");
exit(1);
}

// Configuration de la structure d'adresse du serveur
struct sockaddr_in adresse_serveur, adresse_client;
memset(&adresse_serveur, 0, sizeof(adresse_serveur));
adresse_serveur.sin_family = AF_INET;
adresse_serveur.sin_addr.s_addr = INADDR_ANY;
adresse_serveur.sin_port = htons(port);

// Liaison du socket à l'adresse
if (bind(s, (struct sockaddr*)&adresse_serveur, sizeof(adresse_serveur)) == -1) {
perror("bind");
exit(1);
}

printf("Serveur démarré sur le port %d\n", port);

char tampon[TAILLE_TAMPON];
int a, b, resultat;
char operation;
socklen_t taille_client = sizeof(adresse_client);

while (1) {
// Réception des données du client
int octets_recus = recvfrom(s, tampon, TAILLE_TAMPON, 0,
(struct sockaddr*)&adresse_client, &taille_client);
if (octets_recus == -1) {
perror("recvfrom");
continue;
}

// Extraction des opérandes et de l'opérateur des données reçues
memcpy(&a, tampon, sizeof(int));
memcpy(&b, tampon + sizeof(int), sizeof(int));
operation = tampon[2 * sizeof(int)];

printf("Requête de calcul reçue de %s:%d\n",
inet_ntoa(adresse_client.sin_addr), ntohs(adresse_client.sin_port));
printf("Opération : %d %c %d\n", a, operation, b);

// Effectuer le calcul
switch (operation) {
case '+':
resultat = a + b;
break;
case '-':
resultat = a - b;
break;
case '*':
resultat = a * b;
break;
case '/':
if (b == 0) {
fprintf(stderr, "Erreur : Division par zéro\n");
resultat = -1; // Ou envoyer un message d'erreur au client
} else {
resultat = a / b;
}
break;
default:
fprintf(stderr, "Erreur : Opérateur invalide\n");
resultat = -1; // Ou envoyer un message d'erreur au client
}

// Renvoyer le résultat au client
int octets_envoyes = sendto(s, &resultat, sizeof(int), 0,
(struct sockaddr*)&adresse_client, taille_client);
if (octets_envoyes == -1) {
perror("sendto");
continue;
}
}

close(s);
return 0;
}