2010-03-28 7 views
11

Sto sviluppando un'interfaccia java tra un server di streaming e un client flash. Ho notato che i datagrammi UDP possono raggiungere la mia interfaccia senza ordine anche se entrambi i processi sono eseguiti localmente.Perché ottengo i datagrammi UDP fuori uso anche con processi in esecuzione localmente?

È normale? Ho pensato che, poiché nessun datagramma deve passare attraverso alcun router o dispositivo di rete, non dovrebbe accadere.

+1

Questa è una buona domanda, sono anche interessato a possibili * cause * di questo. –

risposta

7

In realtà non ci sono garanzie di ordine e ricezione sui pacchetti UDP, anche se inviati da localhost su localhost. Solo perché le specifiche del protocollo non implicano nulla a riguardo.

Poiché non è possibile fare ipotesi su di loro si dovrebbe scegliere di utilizzare TCP o gestire riordino utilizzando un numero di sequenza gestito dai programmi ..

8

Questo dipende dal sistema operativo. Anche se non è stato possibile specificare un sistema operativo, non è comunque importante. Per rimanere portatili, si dovrebbe sempre prevedere che i socket dei datagrammi ricevano dati fuori ordine.

+0

+1 per il bit di anticipazione. –

2

Sebbene sia in esecuzione localhost, i datagrammi UDP devono essere fuori sequenza nell'effettiva distribuzione.

Se ne hai bisogno in sequenza, prova TCP.

0

UDP non è specificato per conservare la sequenza, come i manifesti sopra hanno detto tutto, ma se non ci sono router intermedi avrei anche il sospetto di un bug nel tuo codice.

+7

Nah. È probabilmente dovuto alla gestione dei pacchetti multiprocessore. –

+0

Spiegare questo commento. – EJP

+14

Wow, ho appena notato questo commento. Non hai taggato il mio nome, quindi nessuna notifica. In ogni caso: i sistemi operativi che accelerano la gestione dei pacchetti distribuendo il lavoro su più core possono aver elaborato i pacchetti UDP su core diversi e li hanno messi nella coda di lettura dell'applicazione fuori uso. –