Могут ли Java Serversocket и розетки, использующие LoadiOstreams теряют пакеты?

StackOverflow https://stackoverflow.com/questions/2719253

Вопрос

Я использую сервезор на моем сервере и сокетах, которые используют ObjectiOmsTreams для отправки сериализуемых объектов над сетевым подключением. Я разрабатываю по существу более финансовую версию монополии и, таким образом, пакеты, отправляемые и подтвержденные в качестве отправленного / полученного. Нужно ли мне реализовать свой собственный наблюдатель по убыткам пакетов или в том, что уже позаботились с сокетами (сервером)?

Я в первую очередь спрашиваю о потери пакетах во время сетевых кругов или Whatnot, не полную ошибку подключения. Например, братья и сестры перемещают ведущую пластину между моим маршрутизатором и адаптером Wi-Fi компьютера.

http://code.google.com/p/inequity/source/browse/#svn/trunk/src/networkКод можно найти в разделе Network-> ClientController и Network-> Server

Это было полезно?

Решение

Теоретически; да. Нет никакого способа дать 100% теоретическую гарантию, что то, что отправлено на аппаратный слой, получено одинаково на приемном конце.

Практически однако, если вы используете TCP (протокол управления передачей), этот материал уже позаботился; Вы не потеряете никаких пакетов. (Если вы используете UDP с другой стороны (пользовательский протокол Datagram DataGram), это другая история, и это вполне может быть в том, что вы теряете пакеты или получаете их из строя).

Просто посмотрел на ваш код, и кажется, что вы используете несколько потоков. Если это так, вы должны быть совершенно осторожны с синхронизацией. Это может быть вполне может быть так, что он выглядит как пакет был сброшен, хотя он просто не обрабатывается из-за состояния гонки в программе. (Имейте в виду, что GUI, например, работает в собственном потоке.)

Я думаю, что лучший способ решить синхронизацию, - это поставить сетевую петлю в очень маленькую цикл чтения / введенной синхронизированной очереди и подобрать полученные пакеты из очереди, когда вы уверены, что ни один другой нить не будет вмешиваться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top