Domanda

Io sto usando un ServerSocket sul mio server e prese di corrente che utilizzano ObjectIOStreams per inviare oggetti serializzabili tramite la connessione di rete. Sto sviluppando una versione sostanzialmente più finanziaria di monopolio e pacchetti in tal modo di essere inviato e confermato come inviati / ricevuti è richiesto. Ho bisogno di implementare il mio osservatore perdita di pacchetti o è già curata con (Server) Sockets?

Sono principalmente chiedendo di perdere pacchetti durante segnali di ritorno di rete o roba del genere, non errore di connessione completa. Per esempio. fratelli si muovono una lastra di piombo tra il mio router e l'adattatore Wi-Fi del computer.

http://code.google. com / p / disuguaglianza / source / browse / # svn / trunk / src / network Il codice può essere trovato sotto Rete-> ClientController e Rete-> Server

È stato utile?

Soluzione

In teoria; sì. Non c'è modo di dare la garanzia 100% teorico che ciò che viene inviato sul livello hardware, viene ricevuto allo stesso modo sul lato ricevente.

In pratica tuttavia, se si utilizza il protocollo TCP (Transmission Control Protocol) questa roba è già stato curato; non potrai perdere tutti i pacchetti. (Se si sta utilizzando UDP d'altra parte (User Datagram Protocol) è un'altra storia, e può benissimo essere il caso che si sta perdendo i pacchetti, o si fanno fuori uso).

Proprio guardato brevemente il codice, e sembra che si sta utilizzando più thread. Se quindi è necessario essere assolutamente attenti con la sincronizzazione. Potrebbe benissimo essere il caso che si presenta come un pacchetto è stato lasciato cadere, anche se, semplicemente non è gestita a causa di una race condition nel programma. (Tenete a mente che l'interfaccia grafica, per esempio, viene eseguito in proprio thread).

Il modo migliore per risolvere la sincronizzazione, credo, è quello di mettere il loop di rete in una piccola lettura / loop put-on-sincronizzato-coda, e raccogliere i pacchetti ricevuti dalla coda ogni volta che siete sicuro che nessuno altro thread interverrà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top