Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 36
  1. #1

    [c] client server ed exec

    ciao raga avrei un problema

    ho fatto un prgramma client server ( il client invia messaggi al server che li visualizzaa video)

    ora vorrei far si che quando inserisco una determinata stringa mi fa una exec inviando i dati a schermo

    per esempio scrivo ls ed il server mi visualizza il contenuto della cartella
    il problema e che l'exec mi blocca il server come fare?
    posto una parte del codice

    bind(server_fd, (struct sockaddr *) &server, sizeof(server)); //creazione collegamento
    listen(server_fd,5);//resta in ascolto con una coda massima di 5
    client_fd=accept(server_fd,(struct sockaddr *)&client,&client_size);

    while(strncmp(stringa,"exit",4)!=0) //Confronto tra stringhe sui primi n caratteri
    {
    n=read(client_fd,stringa,50);

    if(strncmp(stringa,"ls",2)==0)
    execlp("ls", "ls", (char) 0);
    else

    write(1,stringa,n);
    }


    ciao e grazie

  2. #2
    perchè la exec prende il controllo e il tuo server si chiude.
    Una soluzione è usare fork e chiamare la exec nel processo figlio. Probabilmente potresti anche usare un thread
    ciao
    sergio

  3. #3
    fatto ma contina a chiudersi
    codice:
    client_fd=accept(server_fd,(struct sockaddr *)&client,&client_size); //accetta connesione dal client
       pid=fork();
       if (pid==0)
       {
         while(strncmp(stringa,"exit",4)!=0)  //Confronto tra stringhe sui primi n caratteri
          {
            n=read(client_fd,stringa,50);
           
            if(strncmp(stringa,"ls",2)==0)
              execlp("ls", "ls", (char) 0);
            else
            write(1,stringa,n);
          }
    
       }
       else
      {
      wait(&status);
      
      close(server_fd);
      close(client_fd);
      exit(0);
    ho fatto un errore prima i dati devono essere poi inviati al client
    come faccio se l'exec stampa a video? è possibile ridirezionare l'exec sul client?

    mi spiego meglio

    client -> invia messaggio ->server

    il server
    sesi scrive ls invia al client l'output del comando ls

    altrimenti stampa a video la parola

    tutto termina SOLO quando si scrive exit

  4. #4
    scusa ma è incomprensibile, indenta il codice e racchiudilo trai tag code o php (utilizza i pulsanti che trovi sopra questa text box.
    ciao
    sergio

  5. #5
    ecco fatto scusa ma non sono pratico dei forum

  6. #6
    allora devi usare popen e no exec, che ti apre un pipe (tu lo vuoi in lettura). Leggi dal pipe con le normali funzioni di lettura di file e lo chiudi con pclose.
    Prova a fare
    $man popen
    per i dettagli
    ciao
    sergio

  7. #7
    fp=popen("ls ","r");

    non mi è molto chiaro restituise un file puntato

    devo aprirlo facendo openfile e read e write normale?

  8. #8
    funziona grazie
    solo che uso la w

    fp=popen("ls","w");
    fputs(stringa,fp);
    write(1,stringa,n);

    ora devo passarlo al client

    ti faccio sapere per il resto grazie ancora mi hai illuminato

  9. #9
    tu devi leggere dal pipe, mi sembra che dovresti fare
    codice:
      FILE * fp = popen ("ls -la", "r");
    
    /* normali operazioni di lettura dal file pointer fp
    
      pclose (fp);  // si deve chiudere con pclose

  10. #10
    intendi dal lato client?

    io dal client inserisco i valori il server li legge e li manda al client che li visulizza

    ora non riesco a farli visualizzare sul client

    server che mi visualizza a video

    codice:
    while(strncmp(stringa,"exit",4)!=0)  //Confronto tra stringhe sui primi n caratteri, sicuro con i dati binari
          {
            n=read(client_fd,stringa,50);
            if(strncmp(stringa,"ls",2)==0)
               popen("ls","w"); 
            else
            write(1,stringa,n);
          }
    CODICE CLIENT CHE INSERISCE I DATI
    codice:
    connect(cli_fd,(struct sockaddr *) &client,sizeof(client));//connetti al server
    while(strncmp(stringa,"exit",4)!=0) //Confronto tra stringhe sui primi n caratteri, sicuro con i dati binari
      {
        
        n=read(0,stringa,200);
        write(cli_fd,stringa,n);
        
      
      }
    close(cli_fd);

    dopo quest'ulima write metto una popen in r ????

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 © 2024 vBulletin Solutions, Inc. All rights reserved.