Что касается p2p-соединения и c # - PullRequest
0 голосов
/ 19 января 2011

Я просто хочу знать, как два приложения взаимодействуют друг с другом через Интернет. как один отправить одно сообщение другому, потому что, когда IP не является фиксированным. пожалуйста, дайте мне несколько советов по кодированию, с помощью которых p2p-приложения соединяют другое через Интернет, когда IP неизвестен.

Пожалуйста, помогите мне подробно.

Ответы [ 4 ]

2 голосов
/ 08 февраля 2011

Способ работы однорангового канала netPeerTcpBinding в WCF заключается в том, что он использует комбинацию протокола разрешения имен одноранговых узлов и простого протокола обнаружения служб для обнаружения одноранговых узлов в одноранговой сети.

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

PNRP, с другой стороны, работает через сети и через Интернет с использованием IPv6.Поскольку большинство сетей еще не поддерживают IPv6, Teredo используется для туннелирования этой связи по IPv4.

Когда сетка P2P публикуется в глобальном облаке, имя меша отправляется одному из общедоступных / бесплатных Microsoft.использовать серверы семян PNRP.Когда новые одноранговые узлы подключаются к сети, они сначала запрашивают у этих начальных серверов частичный список одноранговых узлов.Этот список затем используется для дальнейшего разрешения имен одноранговых узлов.

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

По сути, это распределенная хеш-таблица: http://en.wikipedia.org/wiki/Distributed_hash_table

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

Это работает через Интернет (и даже за брандмауэрами / устройствами NAT)благодаря Teredo и IPv6.

2 голосов
/ 19 января 2011

Прежде чем пытаться углубиться в детали реализации и советы по кодированию, вам лучше узнать, как работают сети P2P в целом, каковы возможные архитектуры и т. Д. (Начните с http://en.wikipedia.org/wiki/Peer-to-peer). Ваш вопрос слишком широк, чтобыпомочь вам в деталях ".

Редактировать: Чтобы быстрее войти, это может быть удобно: .NET P2P: Написание одноранговых сетевых приложений с помощью Microsoft .NET Framework

1 голос
/ 19 января 2011

Как указал Спендер, вы не можете сделать это без использования сервера в качестве посредника. Вы ожидаете, что сможете навестить друга, если не знаете его адрес?

Другими словами, каждая из двух машин, намеревающихся установить соединение P2P, будет связываться с известным сервером для обмена информацией о соединении. После этого они могли теоретически разговаривать друг с другом.

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

1 голос
/ 19 января 2011

Обычно это происходит через какой-то каталог, размещенный на сервере в известном месте.

...