Есть два клиента, взаимодействующих с сервером.
В какой-то момент сервер отправляет клиентам информацию друг о друге, чтобы установить соединение.
Два клиента устанавливают сокетное соединение друг с другом для прямого обмена данными, минуя сервер.
Это P2P-соединение?
решение1
Да, это P2P-соединение. Для более подробной информации см.:http://en.wikipedia.org/wiki/BitTorrent_(протокол)
решение2
То, что вы только что описали, называется "Пробивка отверстий". Это можно сделать с помощью обоихTCP и UDPпротоколы.Эта статьядействительно отлично объясняет, как это работает:
После этого пиры могут общаться друг с другом. Этот метод требует центрального сервера для инициализации соединения. Однако, похоже, вы провели хотя бы небольшое исследование этого вопроса.
решение3
Термины «клиент», «сервер» и «одноранговая сеть» немного двусмысленны, а границы между ними размыты.
Определенная сущность X, которая является сервером, обычно не инициирует соединения, а ждет, когда клиенты поговорят с ней. И наоборот, клиенты не слушают соединения, а инициируют соединения к указанному или обнаруженному серверу.
В одноранговом режиме X может либо инициировать, либо принимать соединения.
Теперь X здесь может быть процессом, или частью процесса, или потоком процесса и т. д., но все это должно быть одной и той же службой. Иногда процесс или программа является клиентом одного типа службы, а затем сервером другого. Так что это не будет на самом деле "peer-to-peer", а просто программой, которая является как клиентом (одного типа), так и сервером (другого типа).
В приведенном вами примере происходят две вещи: процесс обнаружения, а затем процесс передачи данных. Таким образом, у вас есть два разных протокола или части протоколов. Почти все, что является «пиринговым», является своего рода гибридом, как этот, и хотя пиры могут обмениваться данными без помощи сервера, им все равно нужно что-то вроде сервера для обнаружения.