|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2006
Messaggi: 34
|
[C#] Socket e perdita di pacchetto
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? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:04.



















