PDA

Visualizza la versione completa : [C] Server che accetta solo 3 client


seibi
01-07-2009, 00:17
ciao a tutti, il linguaggio in questione Ŕ C in ambiente UNIX
devo fare in modo che quando il server ha stabilito la connessione con 3 client inizia a svolgere il proprio servizio.

mi chiedevo se per implementare questo dopo aver creato la socket dopo averle assegnato l'indirizzo e etc etc basta fare tre ACCEPT... che ne pensate??



int main(int argc, char *argv[]) {

int r, r1, r2, r3, ds_sock, ds1, ds2, ds3;
struct sockaddr_in server;
struct sockaddr client1, client2, client3;

//ARMO IL SEGNALE PER INTERRUZIONE TRAMITE Ctrl+c //
signal(SIGINT, terminazione);
ds_scok = socket(AF_INET, SOCK_STREAM, 0);

memset(&server, 0, sizeof(server));
server.sin_port = htons(1000);
server.sin_family = AF_INET;
server.sin_addr.s.addr = htonl(INADDR_ANY);

bind = (ds_sock, &server, sizeof(server));

listen = (ds_sock, 3);

while(1) {
while((ds1 = accept(ds_sock, &client1, sizeof(client1))) == -1);
while((ds2 = accept(ds_sock, &client2, sizeof(client2))) == -1);
while((ds3 = accept(ds_sock, &client3, sizeof(client3))) == -1);

if(fork() == 0) {
close(ds_sock);
r = random();
write(ds1, "START", 10);
write(ds2, "START", 10);
write(ds3, "START", 10);

//invio ad ogni client il messaggio start e da qui in avanti ci sarÓ la funzione svolta dal client//

...

xela86
01-07-2009, 16:28
penso di si anche perchŔ poi la accept Ŕ bloccante per cui non appena fai le accept potrai gestire con i thread le varie socket. occhio che per˛ essendo dentro a un while(1) se non esci dal ciclo ti tornerÓ a fare le accept.

seibi
01-07-2009, 16:41
allora potrei togliere il while(1) e metterlo subito dopo le accept, cosi una volta finita la prima computazione con i client ne inizierÓ una nuova con gli stessi 3 client...

potrei anche elimanare la fork()??? tanto il processo non deve pi¨ tornare in attesa di nuove connessioni...

che dici??


grazie per la risposta!!

xela86
01-07-2009, 21:51
se devi fare delle computazioni uniche e non in un loop puoi ovviamente togliere il while altrimenti se sono operazioni ripetitive mettile nel loop. Per quanto riguarda la fork la puoi togliere se vuoi un server sequenziale altrimenti devi gestire ciascuna socket restituita dalla accept attraverso i thread. ciao

Loading