[C]read e write con socket

di il
1 risposte

[C]read e write con socket

Una volta che client e server sono collegati fra loro tramite socket con protocollo tcp(sotto linux),
il client offre all'utente ad esempio un menu di 3 scelte, da inserire tramite scanf o getchar,
l'utente puo inserire o il carattre a o il carattere b o il carattere c.(è un ciclo da cui si esce con questo carattere)
Se inserisce il carattere c allora con la write viene spedito al server che l olegge con la read e che di conseguenza invia al client u nmessagio tipo "disconnessione in corso", poi chiude il socket e si mette in ascolto x un 'altra connessione .
Il client invece ricevuto il messaggio lo stampa a video e termina .

questa è la parte di server interessata :

while(1)
{
while((ds_sock_acc=accept(ds_sock,&client,&lenght))==-1);
printf("client connesso!!\n\n");
if (fork()==0)
{ close(ds_sock);
do
{
read(ds_sock_acc,buff,MAX_DIM);
printf("messaggi client: %s\n",buff);
}
while (strcmp(buff,"c")!=0);
write (ds_sock_acc,"\n\nfatto",10);
close(ds_sock_acc);
printf("\nclient disconnesso!!\n\n");
printf("\nin attesa di connessione da nuovo client!\n\n");
exit(0);
}
else close(ds_sock_acc);
}//while(1)
}

questa è del client :

do
{printf("\nscelta a/b, c x uscire :");
scanf("%s",scelta);
while(getchar()!='\n');
if (strcmp(scelta,"a")==0)
{ printf("prima opzione");
write(ds_sock,scelta[0],1);
}
else if (strcmp(scelta,"b")==0)
{ printf("seconda opzione");
write(ds_sock,scelta[0],1);
}
}
while(strcmp(scelta,"c")!=0);
read(ds_sock,buff,MAX_DIM);
printf("\nmessaggio dal server%s\n\n",buff);
close(ds_sock);
}

in pratica nn so xchè ma i nquesto caso le read e write nn fanno il loro dovere, se inserisco ad esempio c , i lserver nn chiude la connessione e il client nn termina.

1 Risposte

  • Re: [C]read e write con socket

    Risolto aggiustando il codice e soprattutto aggiungendo questa:

    in pratica dopo while(strcmp(scelta,"c")!=0);
    ci voleva write(ds_sock,scelta,MAX_DIM); nel codice del client.
Devi accedere o registrarti per scrivere nel forum
1 risposte