2016-12-25 1 views
0

Мне нужно сделать проект приложения bittorrent в Java, и для этого требуется передача данных по протоколу UDP, а не по протоколу TCP. В этом проекте учитель просит меня заверить надежность в протоколе UDP. Поэтому я искал некоторые решения в Интернете и обнаружил, что в java существуют такие классы, как «ReliableSocket» и «ReliableServerSocket». Поэтому я хотел бы знать, что эти классы могут удовлетворить требования моего проекта. И каковы различия между этими двумя классами?Надежность в UDP

Большое спасибо за вашу помощь

+0

Tcp - надежный протокол, то есть протокол является надежным и абстрагируется от уровня приложения, который инкапсулирован. Udp не является и поэтому сначала применяет некоторые заказы к пакетам или сеансу (нет такой вещи, как сеанс в udp, вы должны создать это на прикладном уровне), чтобы можно было собрать неработающие пакеты и обнаружить упавшие пакеты и их обижают. В основном все вещи, которые Tcp делает для вас эффективно и аккуратно отвлеченными от вас, вам нужно сделать. Я бы сказал, почему не просто использовать Tcp? Похоже на плохое использование существующих технологий. –

+0

Также считают, что Google сделала свою собственную версию Udp под названием Quick, которая, как я думаю, предназначена для более высокой производительности для tcp, хотя я не уверен в специфике Quick, так как это не интернет-стандарт, как tcp и udp. Но если это сделано google, вероятно, для него есть/некоторые пакеты nodejs. –

+0

Является ли это Oracle Java или javascript? Я предполагаю, что Oracle Java на данный момент. –

ответ

0

UDP является потерями ненадежный протокол, который работает поверх протокола IP. В отличие от TCP (который обрабатывает все аспекты надежной связи) до уровня приложения обрабатывается упакованные пакеты и другие аспекты «надежного» транспортного протокола. Таким образом, вполне вероятно, что любая реализация, требующая надежности в той же степени, что и TCP, будет иметь дополнительные накладные расходы.

Вы можете выделить два порта port A и port B. Каждый порт является однонаправленным, если отсутствует упавший пакет.

client 1 = port A = server 2

server 1 = port B = client 2

Это держит вещи простыми. Сервер просто отправляет данные и периодически слушает, но получает сообщения только в том случае, если клиент передает сигнал.

Клиент - это отрицание. Он принимает сигналы и отправляет только в случае отсутствия пакета. Альтернативной реализацией будет та, в которой пара клиент/сервер может разговаривать друг с другом, делая порт действительно однонаправленным.

Мы получаем надежность сообщений на обоих портах, используя два индекса пакета.

client index 1 = server index 2

server index 1 = client index 2

Индекс для каждого из них один байт и увеличивается клиентами при отправке нового сообщения. Доставка сообщений принимается до получения специального сообщения, которое будет UDP-сообщением для упавшего пакета. Это могло бы заглушить сигнал для сброшенного сообщения, вероятно, в его самом значительном или наименее значимом бите/байте в зависимости от консистенции дизайна, а также от индекса сообщения. Кажется, что очередь тоже нужна, но я еще не детализировал ее.

+0

Мои данные могут быть в любом типе, таком как byte [], int, String, java-объект или объект, который я создаю. Поэтому, когда мы хотим передавать данные по UDP, мы должны преобразовать свой тип данных в массив байтов и привязать его к DatagramPacket. Но DatagramPacket не гарантирует надежность, я иногда терял свой пакет. –

+0

Итак, я хотел бы знать, поддерживает ли java какой-либо доступный механизм для передачи данных с надежностью. Ваша идея хорошая, но мы должны сами программировать. –

+0

Да, вам нужно запрограммировать его самостоятельно. Действительно, если вы хотите reliablillity вы должны использовать TCP, он был разработан, чтобы быть надежным. Тот, кто обращается к TCP, распознает клиенты и серверы. Таким образом, обычно два конца, каждый делает все запросы, а другой просто отвечает на эти запросы. Я не хочу переходить на перевод сетевых адресов, но есть проблемы, когда сервер хочет действовать как клиент. Одним из решений этого является WSS или веб-сокет, который делает Tcp более похожим на Udp, поскольку обе стороны могут выступать в роли клиента. –

Смежные вопросы