PDA

View Full Version : [C#] Socket e perdita di pacchetto


Il Genio
04-06-2008, 17:35
BuonGiorno a tutti.
Sto tentando di realizzare una comunicazione tra processi in C# attraverso le socket, utilizzando il protocollo TCP.
Il programma client avvia una comunicazione con il server, e per fare ciò ho creato una specie di protocollo a livello di applicazione, cui il client e il server devono attenersi.
Il server deve ricevere dati (stringhe ed immagini) dal client...Il server, dopo ogni immagine ricevuta, attende dal client delle stringhe...Alcune volte accade che l'immagine ricevuta sia corrotta, e quindi TCP provoca la ritrasmissione dell'immagine, con conseguente collasso del server, che sta invece attendendo delle stringhe.
Come posso rilevare un evento di perdita che provoca la ritrasmissione del pacchetto?

ilsensine
04-06-2008, 20:40
Posso dirti che nel 99.99% dei casi i problemi che osservi sono causati in errori nella gestione dei socket a livello applicativo. Il protocollo tcp gestisce da solo, in maniera completamente trasparente alle applicazioni, la verifica dei pacchetti corrotti e la loro ritrasmissione, è estremamente raro che un pacchetto corrotto abbia la checksum "corretta" e sfugga al sistema di controllo. Molto più facile invece fare errori da codice: ad esempio un errore molto comune, che ho trovato anche in codice scritto da "esperti", è quello di assumere che, se trasmetti n byte, puoi ricevere tutti gli n byte in una sola lettura. A causa dello spezzettamento dei pacchetti tcp, è normale dover effettuare più letture per ricevere i dati completi che hai inviato. E' solo un esempio, potrebbero essercene altri.