PDA

Visualizza la versione completa : [C] Interazione server/client tramite shell


Fix87
12-06-2012, 00:19
Eccomi qua con il problema delle socket.
Sto implementando una rubrica telefonica e ho scritto tutte le funzioni necessarie.
Ora il momento della connessione client/server che mi sta creando qualche problema nella loro comunicazione.
La parte della connessione stata creata e il server accetta e attende richieste da parte del client. Ora il mio problema riguarda l'interazione da parte del client con la rubrica.
Praticamente le funzioni che ho scritto stanno all'interno del file funzioni.c che risiede nella macchina del server (giustamente!).
Ora la mia domanda la seguente.
C' un modo per far collegare il client direttamente al file funzioni.c? Oppure ogni operazione la deve leggere in background il server ed inviarla al client sul proprio terminale (shell di linux)?

oregon
12-06-2012, 00:22
Ma cosa deve fare il client e cosa il server?

Fix87
12-06-2012, 00:37
Praticamente il server deve gestire le richieste del client. Queste richieste riguardano modifiche di una rubrica o visualizzazioni.
Il client pu:
1)Aggiungere un contatto;
2)Modificare un contatto;
3)Visualizzare un contatto;
4)Visualizzare la rubrica;
5)Cancellare un contatto;
6)Uscire dalla rubrica.

All'avvio della connessione tra server e client il primo chiede al secondo se vuole accedere con login per effettuare modifiche o sonza login non potendo effettuare modifiche.

Una volta scelto l'indice corrispondente effettuando il login accede alle scelte sopraelencate, invece se non effettua il login accede a scelte che permettono soltanto di fare delle visualizzazioni senza poter modificare niente.

Tutte queste operazioni sono delel funzioni gia belel e pronte che devono solo essere eseguite.

oregon
12-06-2012, 00:39
Le funzioni saranno eseguite solamente sul server. Nel client quel codice non ti serve perch sufficiente il codice per la comunicazione e la presentazione dei dati.

Fix87
12-06-2012, 00:47
Quindi tutte le printf che avevo messo nel codice delle funzioni per poter visualizzare sul terminale i risultati le devo trasformare in printf verso il client?

oregon
12-06-2012, 01:18
I dati dovranno essere inviati dal client al server e viceversa tramite apposite funzioni (send/receive). Quello che riceverai dal server. lo mostrerai sul client tramite printf.

Fix87
12-06-2012, 01:24
Le funzioni che ci ha mostrato il professore a lezione sono la write() e la read().
Esistono anche altre funzioni? Praticamente quello in cui sono bloccato io sono il seguente problema, io ho questo codice che appena viene lanciata la connessione tra server e client dovrebbe apparire sul terminale del client:


int login(){
int a, b='n', scelta;
printf("\n\n\n\n\nScegli un azione inserendo il numero corrispondente\n");
printf("************************************************** *******\n");
printf("1. Accesso con autenticazione\n");
printf("2. Accesso senza autenticazione\n");
printf("0. Uscita\n");
printf("************************************************** *******\n");
if(scanf("%d",&scelta)==0){
scelta=-1;
int ch;
while((ch=getchar())!='\n' && ch!=EOF);
b='s';
}
else{
switch (scelta){
case 0: /*Usicta dal login*/
printf("\n\nArrivederci!\n\n");
break;

case 1:/*Accesso con autenticazione*/
autenticazione();
break;

case 2:/*Accesso senza autenticazione*/
presentazione2();
menu2();
break;

default:/*Riaccede al login per inserimento indice errato*/
printf("\n\nHai inserito un indice inesistente, riprova!\n\n");
{
int ch;
while((ch=getchar())!='\n' && ch!=EOF);
}
login();
break;
}
}
if(b=='s'){
printf("\n\nQuello che hai inserito non un numero!\n\n");
login();
}
return 0;
}


Come faccio a far visualizzare tutta la seguente funzione sul client? O meglio tutte le printf? Le dovrei visualizzare sul terminale del client come se le visualizzassi in remoto sul server stesso.

oregon
12-06-2012, 01:28
Questo codice lo esegui nel client e dovrebbe servire ad effettuare il login al server (a parte quella chiamata ricorsiva della login che ti ho gi detto essere sbagliata).

Il collegamento e lo scambio dati dovrebbe avvenire nella funzione

autenticazione()

che chiami all'interno (e di cui non si sa nulla).

Fix87
12-06-2012, 01:35
Quindi mentre gira sul terminale del client il programma contemporaneamente gira anche sul terminale del server? Me lo chiedo perch tutte le funzioni che ho fatto hanno come ritorno return 0 dato che prelevano soltanto dati o inseriscono dati all'interno del file rubrica.txt e tramite delle printf fanno vedere sul terminale i risultati ottenuti.

oregon
12-06-2012, 01:41
Mi sa che questa discussione potrebbe andare avanti ore senza riuscire a fugare tutti i tuoi dubbi.

Quando c' una interazione client/server su socket esiste sempre un programma in esecuzione sul server e uno che viene eseguito sul client e questi comunicano (scambiano dati che possono rappresentare informazioni e/o comandi). Al limite, i due programmi possono girare sullo stesso PC ma la cosa non cambia.

Quindi dovrai prevedere un programma "client" e un programma "server" separati.

E' possibile che dovrai approfondire un po' di pi le tue conoscenze sulla programmazione di rete client/server prima di continuare il tuo programma.

In ogni caso, mi sa che questa discussione sta diventando un po' troppo confusa e generica dato che non c' un vero e proprio problema ben preciso.

Loading