Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitā e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Ripulire buffer socket.
Forum - C/C++ - Ripulire buffer socket.

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
ŽUseless (Normal User)
Rookie


Messaggi: 26
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 18:35
Venerdė, 10/04/2009
é possibile ripulire il buffer di una soket??dev c++.
Ho fatto un programma  che mi invia un bel po di send al secondo dal server al client,e qualcuna me la perde.Quando vado a fare altre richieste al server,e faccio una recv sul client,oltre alla risposta prendo dalla socket anche dati che mi ero perso in precedenza.Ho risolto facendo una recv che mi riceve molti caratteri prima di fare una nuova richiesta,ma non mi sembra una buona soluzione.qualcuno sa invece come svuotare il buffer della socket??


c++
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:38
Venerdė, 10/04/2009
Non ho capito ... tu invii dei dati e poi non li vuoi ricevere quando questi arrivano?

Non si e' capito molto del tuo problema ... e sicuramente la soluzione non e' "ripulire" nessun buffer ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
ŽUseless (Normal User)
Rookie


Messaggi: 26
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 21:54
Venerdė, 10/04/2009
No il fatto č che ricevo diverse send al secondo su una socket,ma non riesco a prenderle tutte,e non mi interessano quei dati,sono solo per una sincronizzazione per una funzione del mio progetto,quando esco da questa funzione,ricevo un buffer che stampo a schermo,ma prima del buffer a schermo mi vengonono i caratteri che mi ero perso con le send precedenti....quindi prima di ricevere il buffer da stampare a schermo,dovrei svuotare tutti i caratteri precedenti.

cerco di farti uno pseudo codice per capirci.

client{
while(condizione){
...
send(roba)//mando un bel po di send al secondo
...
recv(sinc)//mi serve per sincronizzarmi
}
recv(buffer)
cout<<buffer;//prima di buffer mi stampa i caratteri di sincronizzazione

return
}

quindi prima del'ultima recv devo scuotare il buff della socket






Ultima modifica effettuata da ŽUseless il 10/04/2009 alle 21:59


c++
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 23:21
Venerdė, 10/04/2009
Ma quale protocollo stai usando ?

Che dati stai scambiando ?

In che senso "sincronizzazioni" ?

Forse non ti rendi conto ... tu sai tutti i dettagli del tuo problema, noi no e ti assicuro che quello che hai detto non aiuta a capire ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
ŽUseless (Normal User)
Rookie


Messaggi: 26
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 2:28
Sabato, 11/04/2009
che cambia che dati sto scambiando e che protocollo sto usando?non mi sembra che serva per la mia domanda,cmq scambio le coordinate del mouse e i tasti premuti su una macchina remota e uso il protocollo tcp per la socket.Va tutto alla perfezione,ma il problema č quando mi va a stampare il path della cartella corrente del pc remoto a cui sono connesso,non capisco a cosa ti servono queste informazioni.

Ultima modifica effettuata da ŽUseless il 11/04/2009 alle 2:30


c++
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 2:56
Sabato, 11/04/2009
Testo quotato

Postato originariamente da ŽUseless:

che cambia che dati sto scambiando e che protocollo sto usando?non mi sembra che serva per la mia domanda,



Questo lo pensi tu.

Intanto pensavo che tu usassi l'UDP e non il TCP. E dato l'elevato flusso di dati sarebbe "consigliabile" proprio il protocollo UDP e non il TCP.

Testo quotato

cmq scambio le coordinate del mouse e i tasti premuti su una macchina remota e uso il protocollo tcp per la socket.Va tutto alla perfezione,ma il problema č quando mi va a stampare il path della cartella corrente del pc remoto a cui sono connesso



E questo cosa c'entra? Non avevi parlato di questo problema ...

Testo quotato

non capisco a cosa ti servono queste informazioni.



Ma qual e' il tuo problema se si chiedono delle informazioni per capire meglio il contesto di un problema? Non capisco perche' ti fai tante domande piuttosto di dare delle risposte ... non hai postato nessun codice da controllare alla ricerca di soluzioni e hai tutte queste perplessita'?

In fondo il problema e' tuo e c'e' chi ti risponde impiegando il proprio tempo per cercare di risolverlo ... se non vuoi farlo, beh, amici come prima.

Ultima modifica effettuata da theprogrammer il 11/04/2009 alle 2:58


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
ŽUseless (Normal User)
Rookie


Messaggi: 26
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 13:57
Sabato, 11/04/2009
Haha ok,la mia domanda era semplice,come si svuota il buffer di una socket??se cč il modo di svuotarla il tipo di protocollo č inutile no?come il codice.
Forse non avevi capito la domanda :)
Io non sono sicuro che esiste una funzione che gli passi l HANDLE della socket e ti svuota il buffer di sistema dove vai a laggere con la recv.
Cmq per alcuni modiuli del progetto che sto facendo Invece della recv ho usato la ReadFile che funziona benissimo,prende in ingresso un HANDLE,e quindi funziona per file e socket,tanto sempre un buffer č,ma non conosco nemmeno funzione che azzerino file e prendono HANDLE invece di FILE in ingresso :D

Come non sono sicuro che esista un api che intercetta in una CONSOLE la chiusura del sistema,come avevo scritto nell altro post.

Ultima modifica effettuata da ŽUseless il 11/04/2009 alle 14:02


c++
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 23:00
Sabato, 11/04/2009
Testo quotato

Postato originariamente da ŽUseless:

Forse non avevi capito la domanda :)



Avevo capito la domanda. E avevo capito che tu non sai cosa sia un socket e la relazione che c'e' tra un socket e il suo buffer.

Testo quotato

Io non sono sicuro che esiste una funzione che gli passi l HANDLE della socket e ti svuota il buffer di sistema dove vai a laggere con la recv.



Il buffer NON puo' essere svuotato se non eseguendo la recv e scartando i dati ricevuti.

Le domande che ti ho fatto sono state per capire il CONTESTO in cui gira il tuo programma e suggerirti il modo migliore per operare dato che un buffer di un socket NON si svuota e NON HA SENSO svuotarlo.


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
ŽUseless (Normal User)
Rookie


Messaggi: 26
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 2:50
Domenica, 12/04/2009
okok grazie della risposta allora,quella soluzione di fare una recv e di scartare il contenuto era il modo in cui avevo risolto io,speravo ci fosse un modo con piu stile per farlo,ma se quella č l unica soluzione :) grazie ancora della risposta allora.
sai anche come si intercetta la chiusura di un processo e del sistama operativo da console allora???


c++
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo