Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]Comunicazione client/server

    Sto realizzando un'applicazione client/server ma c'è una cosa che non so gestire.

    Dal client l'utente deve scrivere 1, 2 o 3 per stabilire ciò che vuole fare. Il server deve capire l'opzione
    scelta dal client e fornire il servizio (una funzione) al client ma non so proprio come fare.

    Facciamo finta che ho un elenco remoto. Il client vuole ricercare una voce in tale elenco (magari un file
    di testo). Quindi sceglie 1 magari. Allora il server dovrebbe avviare una funzione che richiede i dettagli della ricerca e fornire una risposta al client.

    Client
    codice:
    //Ho creato il socket, e fatto la connect, il server è in attesa tramite la accept..
    
    int scelta;
    
    while(1) {
    
              printf("1 per cercare, 2 per aggiungere, 3 per chiudere\n");
              scanf("%d",&scelta);
    
              if(scelta == 1) {
                         //Devo avviare la ricerca nell'elenco remoto 
              }
              if(scelta == 2) {
                        //Devo aggiungere una voce all'elenco
              }
              if(scelta == 3) {
                        //Chiusura
              }
              errore
    }
    Un piccolo indizio almeno, grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,326
    Non capisco il problema ... tu invii il messaggio al server e questo esamina la stringa ed esegue i compiti di conseguenza.

    Non ci sono particolari regole da seguire ... se hai dubbi su come fare questo tipo di programmi, forse non è ancora il momento di affrontarli.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Cercherò di essere più preciso

    Così può funzionare?


    Client:

    Invio messaggio al server (in base alla scelta il messaggio cambia ovviamente):

    codice:
    int wr = write(ds_sock, "ricerca", sizeof(ricerca));
    //Devo acquisire i dati, non so come.
    Server:

    codice:
    char buff[dim];
    int rd = read(ds_sock, buff, dim);
    if(strcmp(buff,"ricerca")==0)
    {
        /*AL CLIENT deve avviarsi una funzione che prende i dati da ricercare (magari li salvo in una struct)
        avvio la funzione di ricerca e salvo il risultato in un'altra struct
        mostro il risultato al client*/
    }
    if(strcmp(buff,"aggiungi")==0)
    {
        /*fai altro*/
    }
    ecc..
    Forse così i miei dubbi sono più chiari

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,326
    A parte che questa

    sizeof(ricerca)

    non ha senso (ma capisco che è un esempio), il metodo usato potrebbe creare problemi (potrebbe), ovvero a volte potrebbe funzionare e a volte no a causa del modo con cui i dati vengono trasmessi/ricevuti in rete (soprattutto via internet).

    In un determinato momento potresti ricevere parte della parola (ad esempio, "ric") e subito dopo la seconda parte "erca" magari con altri pezzi aggiunti. Devi quindi fare attenzione a ciò che trasmetti e ricevi. Ti consiglio di inviare sempre un "pacchetto" preciso, ad esempio

    *07*RICERCA

    in modo che alla ricezione di debba ottenere il numero tra *

    *07*

    e che questo valore indichi quante lettere ricevere per completare il comando.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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