codice:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>
#include <stdlib.h>
#define PORT 10000
#define MAXCONN 5
#define DIMBUFF 10
void addr_initialize();
void addr_initialize(struct sockaddr_in *indirizzo, int port, long IPaddr)
{
indirizzo->sin_family = AF_INET;
indirizzo->sin_port = htons((u_short) port);
/* htons: host to network conversion, short */
indirizzo->sin_addr.s_addr = IPaddr;
}
int main(int argc, char * argv[])
{
int sd,new_sd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int client_len=sizeof(client_addr);
char inbuf [DIMBUFF];
char *carattere,*numero;
int posizione;
int *n1,*n2;
int tot;
char *stringa_send;
stringa_send=calloc(20,sizeof(char));
char terminatore[2]={'\0','\n'};
addr_initialize(&server_addr, PORT, INADDR_ANY);
sd=socket(AF_INET,SOCK_STREAM,0);
bind(sd,(struct sockaddr*) &server_addr,sizeof(server_addr));
listen(sd,MAXCONN);
while (1)
{
printf("\nMi pongo in attesa di richieste di connessione\n");
new_sd=accept(sd,(struct sockaddr*) &client_addr, &client_len);
printf("Ho accettato una connessione ");
printf("dal client con port: %d\n", ntohs(client_addr.sin_port));
do
{
recv(new_sd,&inbuf,DIMBUFF,0);
printf("\nHo ricevuto i seguenti parametri %s\n", inbuf);
n1=calloc(20,sizeof(int));
n2=calloc(20,sizeof(int));
carattere=strchr(inbuf,'+');
posizione=carattere-inbuf;
strncpy(n1,inbuf,posizione);
numero=strpbrk(carattere,"1234567890");
strcpy(n2,numero);
printf("%s\n%s\n",n1,n2);
tot=n1+n2;
printf ("il totale dell'operazione e' %d", tot);
printf ("invio il totale al client \n");
sprintf (stringa_send, "%d\0\n", tot);
send (new_sd, stringa_send, 3, 0);
send(new_sd,terminatore,2,0);}
while (inbuf!='q');
close(new_sd);
printf("\nChiudo la connessione\n");
}
close(sd);
}