Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19

    [C] Server che accetta solo 3 client

    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??


    codice:
    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//
    
    ...

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    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.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2009
    Messaggi
    19
    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!!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    49
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.