Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 INFORMATICA - Terzo Anno
 Reti di Calcolatori
 Superare il blocco della recv
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

capocla
Nuovo Utente



Inserito il - 03/04/2011 : 19:53:36  Mostra Profilo  Visita l'Homepage di capocla Invia a capocla un Messaggio Privato  Rispondi Quotando
Vi posto innanzitutto il link dell'esercizio che mi da problemi
http://www.di.uniba.it/~reti/LabProRete/esercizio4.pdf

Il client quindi manda una stringa al server da mandare a due a due.
Il server riceve la stringa un carattere per volta.
Il problema, però, è che il client non sa quanti byte deve ricevere. In questo modo noi creiamo un ciclo indefinito ma il problme è che quando la stringa spedita è finita, il client si attesta nuovamente sulla funzione recv che blocca lo scorrere del programma.
A parte il passare precedentemente la lunghezza della stringa al server, c'è qualche modo per bypassare il blocco della funzione recv?
Grazie

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 04/04/2011 : 09:49:14  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
si con un carattere di fine trasmissione... quando ricevi il carattere di terminazione, anziché rimetterti in receive, esci dal ciclo

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

capocla
Nuovo Utente



Inserito il - 04/04/2011 : 10:40:18  Mostra Profilo  Visita l'Homepage di capocla Invia a capocla un Messaggio Privato  Rispondi Quotando
In sostanza, quindi, nel client quando passo la lunghezza del messaggio da spedire al server la devo calcolare come

messaggioLen = strlen(messaggio);
messaggio[messaggioLen] = '\0';

for(i = 0; i <=messaggioLen; i+=2)
   send(sock, messaggio, 2, 0);

dove messaggioLen è un intero che rappresenta la lunghezza del messaggio, messaggio è un array di caratteri e sock è l'intero identificativo della socket nel client.

mentre nel server ci dovrebbe essere un'istruzione del tipo

while (messaggio[0] == '\0')
   byteRcvd = recv(clientSocket, messaggio, 1, 0);

dove clientSocket è l'intero identificatovo della socket del client nel server e byteRcvd sono il numero di byte ricevuti nel messaggio.

Giusto?
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 04/04/2011 : 14:29:08  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
messaggio != '\0'...

inoltre puoi decidere un carattere diverso da quello di terminazione delle stringhe (per esempio EOT o ETX) per essere più generico...

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

capocla
Nuovo Utente



Inserito il - 04/04/2011 : 19:41:30  Mostra Profilo  Visita l'Homepage di capocla Invia a capocla un Messaggio Privato  Rispondi Quotando
Si, scusa... mi ero confuso con la condizione del do while
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 05/04/2011 : 10:51:58  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
in c++ while o do while sono uguali... nel senso che ciclano entrambi su condizione soddisfatta ;)

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,13 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000