ŽUseless (Normal User)
Rookie
Messaggi: 26
Iscritto: 06/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??
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/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 ...
|
|
ŽUseless (Normal User)
Rookie
Messaggi: 26
Iscritto: 06/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 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/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 ...
|
|
ŽUseless (Normal User)
Rookie
Messaggi: 26
Iscritto: 06/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 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
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.
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 ...
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 |
|
ŽUseless (Normal User)
Rookie
Messaggi: 26
Iscritto: 06/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
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 |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
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.
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. |
|
ŽUseless (Normal User)
Rookie
Messaggi: 26
Iscritto: 06/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???
|
|