#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 4000
#define MAXCONN 5
void addr_initialize(struct sockaddr_in * pt, unsigned int TCP_port, unsigned int IP_addr){
pt->sin_family = AF_INET;
pt->sin_port = htons ((unsigned short int) TCP_port);
pt->sin_addr.s_addr = IP_addr;
}
int main (){
FILE *file; /*INIZIO DICHIARAZIONE VARIABILI*/
struct sockaddr_in server_addr, cli_addr;
int client_len = sizeof (cli_addr);
int sd, new_sd, i, u, m, pid, teminatore;
char ch_term [5], ch_recv[64], num_char[10]; /*FINE DICHIARAZIONE VARIABILI*/
addr_initialize (&server_addr, PORT, INADDR_ANY);
sd = socket (AF_INET, SOCK_STREAM, 0); /*CREAZIONE DEL SOCKET SD*/
bind (sd, (struct sockaddr *) &server_addr, sizeof (server_addr);
listen (sd, MAXCONN); /*SI PONE IN ATTESA DI EVENTUALI CONNESSIONI*/
for (i = 0; i < 2; i++){ /*ACCETTA DUE CONNESSIONI*/
new_sd = accept (sd, (struct sockaddr *) &client_addr, &client_len);
pid = fork (); /*ESECUZIONE DELLA FUNZIONE FORK*/
if (pid == 0){ /*PROCESSO FIGLIO*/
for (u = 0; ch_term [u] != '\n'; u++){ /*RICEVE UN CARATTERE ALLA VOLTA FINO A '\N'*/
recv (new_sd, ch_term [u], 1, 0); /* E LO IMMAGAZZINA IN CH_TERM*/
}
terminatore = atoi (ch_term); /*TRASFORMA IN INT CH_TERM*/
file = fopen ("~/term.txt", "r"); /*APRE IL FILE TERM.TXT IN SOLA LETTURA*/
fseek (file, terminatore, SEEK_SET); /*SI SPOSTA DI UN VALORE TERMINATORE NEL FILE*/
fscanf (...) /*COME LEGGO IL CARATTERE????*/
for (m = 0; ch_recv [m] != /*dal terminatore*/ || ch_term [m] != 'q'; m++){
recv (new_sd, ch_recv[m], 1, 0);
}
sprintf (num_char, "%d\n", m);
send (num_char, m, 10, 0);
close (new_sd);
exit (0);
}
else close (sd);
}
}