/* COISERVER - SERVER CONNESSION ORIENTED SU INTERNET PORT =1234*/ #include #include #include #include #include #include #define NSTRS 3 #define MSGLEN 32 char *strs[NSTRS] = { "1a stringa dal server", "2a stringa dal server", "3a stringa dal server" }; main() { char c; int fromlen; register int i, s, s1, s2, pid; struct sockaddr_in myname, fromname; char str1[200]; fd_set ready; struct timeval tempo; if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("server:socket"); exit(1); } myname.sin_family = AF_INET; myname.sin_port = htons(1234); myname.sin_addr.s_addr = INADDR_ANY; if (bind(s, (struct sockaddr*)&myname, sizeof myname) < 0) { perror("client: bind"); exit(1); } if (listen(s, 5) < 0) { perror("server: listen"); exit(1); } /*Accetto due connessioni*/ s1 = accept(s, NULL,0); if (s1 == -1) perror("accept"); s2 = accept(s, NULL,0); if (s2 == -1) perror("accept"); i=0; while(1){ FD_ZERO(&ready); FD_SET(s1,&ready); FD_SET(s2,&ready); tempo.tv_sec = 0; tempo.tv_usec =1000; if (select(FD_SETSIZE, &ready, (fd_set*)0, (fd_set*)0, &tempo)<0){ perror("select"); continue; } /* Inizia qui lo scambio di dati con i clients */ if (FD_ISSET(s1,&ready)) { fromlen = recv(s1, str1,MSGLEN,0); str1[fromlen] = '\0'; printf("%s\n",str1); send(s1,strs[0], MSGLEN, 0); } if (FD_ISSET(s2,&ready)) { fromlen = recv(s2, str1,MSGLEN,0); str1[fromlen] = '\0'; printf("%s\n",str1); send(s2,strs[1], MSGLEN, 0); } /* qui si fa qualcosa */ printf(" %d\n",i++); } }