#include #include #include #include #include #include #include #include #define PORT 35601 #define MAXCONN 5 #define MAXCHAR 64 void addr_init( struct sockaddr_in *addr, int port, long ip ) { addr->sin_family =AF_INET; addr->sin_port =htons ( (u_short)port ); addr->sin_addr.s_addr =ip ; } int main() { struct sockaddr_in srvaddr, cliaddr; int sd, newsd, pid, i, num; int clilen = sizeof (cliaddr); char ch; char inbuf[64], inbuf2[64], inbuf3[64], invia[8]; int ric=0,snd,cont=0; FILE * FP; addr_init (&srvaddr, PORT, INADDR_ANY); sd = socket (AF_INET, SOCK_STREAM, 0); /*per legare socket a struttura srvaddr*/ bind(sd, (struct sockaddr *) &srvaddr, sizeof (srvaddr)); /*ascoltare a evtl. connessioni*/ listen (sd, MAXCONN); do { printf("\nMi pongo in attesa di connessioni!\n"); newsd = accept(sd, (struct sockaddr*)&cliaddr, &clilen); printf("\nHo accettato una connessione\n"); printf("\ndal CLIENT con port %i \n", ntohs(cliaddr.sin_port)); pid=fork(); if (pid==0) { printf("Sono il figlio\n"); do { cont=0; do { ric=recv(newsd, &inbuf[cont],1,0); cont++; }while (inbuf[cont-1]!='\n'); num=atoi(inbuf); FP=fopen("/home/info2/term.txt","r"); printf("file aperto\n"); fscanf (FP,"%s",inbuf2); ch=inbuf2[num]; fclose (FP); printf("file chiuso\n"); cont=0; printf("Terminatore %c \n",ch); do { ric=recv(newsd,&inbuf3[cont],1,0); cont++; }while (inbuf3[cont-1]!=ch && cont<64); printf("caratteri contati = %d\n", cont); sprintf (invia,"%d\n",cont); send (newsd, invia, 3,0); } while (inbuf3[cont-1]!='q'); close (newsd); } else { printf("Sono il padre...chiudo newsd\n"); close (newsd);} }while (ch!='q'); close (sd); return 0; }