|
/* Codi solucio de la practica: SERVIDOR */ |
|
|
|
/* Inclusio de fitxers .h habituals */ |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
|
|
/* Inclusio de fitxers .h per als sockets */ |
|
#include <sys/socket.h> |
|
#include <sys/types.h> |
|
#include <netinet/in.h> |
|
#include <arpa/inet.h> |
|
#include <unistd.h> |
|
|
|
#define MIDA_BUFFER 1024 |
|
|
|
int main(char *a){ |
|
|
|
int s; /* Per treballar amb el socket */ |
|
struct sockaddr_in serv_adr, client_adr; |
|
char buffer[MIDA_BUFFER]; |
|
socklen_t mida; |
|
int n; |
|
|
|
/* Volem socket d'internet i no orientat a la connexio */ |
|
s = socket(AF_INET, SOCK_DGRAM,0); |
|
|
|
/* Posem les dades del socket */ |
|
serv_adr.sin_family = AF_INET; |
|
serv_adr.sin_addr.s_addr = INADDR_ANY; |
|
serv_adr.sin_port = htons(44444); |
|
|
|
/* Enllacem el socket */ |
|
n = bind(s, (struct sockaddr*)&serv_adr, sizeof(serv_adr)); |
|
|
|
if (n < 0) |
|
{ |
|
printf("No s'ha pogut enllacar el socket\n"); |
|
} |
|
else |
|
{ |
|
/* Servidor operatiu! */ |
|
printf("SERVIDOR OPERATIU!\n"); |
|
|
|
while (1) /*Fem un bucle infinit per estar escoltant sempre*/ |
|
{ |
|
|
|
recvfrom(s, buffer, MIDA_BUFFER, 0, (struct sockaddr*)&client_adr, &mida); |
|
printf("Paquet rebut!\n"); |
|
|
|
int n1, n2; |
|
|
|
sscanf(buffer,"%d %d",&n1,&n2); |
|
|
|
int resultat; |
|
resultat = n1 * n2; |
|
printf("%d x %d = %d\n",n1,n2,resultat); |
|
sprintf(buffer, "%d",resultat); |
|
|
|
printf("Resultat enviat al client\n"); |
|
sendto(s, buffer, MIDA_BUFFER, 0, (struct sockaddr*)&client_adr, sizeof(client_adr)); |
|
printf("************************\n"); |
|
printf("Esperant nova petició\n\n"); |
|
} |
|
} |
|
|
|
/* Tanquem el socket */ |
|
close(s); |
|
return 0; |
|
} |