TCP P2P без сервера

Можно ли написать программу TCP P2P без сервера? Когда я гуглил этот вопрос, я нашел кое-что о прохождении NAT,UPnP, могу ли я их как-нибудь использовать?

2 ответа

Решение

Да, вы можете (где, как указывает GrandmasterB, каждый узел имеет сокеты как для сервера, так и для клиента). Тем не менее, как вы уже знаете, NAT причинит вам боль.

Если вы не можете использовать промежуточные блоки (серверы на общедоступных IP-адресах, к которым подключаются ваши клиенты (*)) - и вы, возможно, не хотите их, потому что они скорее противоречат точке P2P - и вы не против описать свои детали соединения с SDP, вы можете попробовать интерактивное установление соединения.

По сути, ICE пробует разные стратегии для подключения. Это подключаемая архитектура, так что вы можете добавить свои собственные стратегии. По умолчанию ICE описывает методы обхода UDP, но расширение для обеспечения возможности подключения TCP находится в разработке.

(*) Вы всегда можете попробовать такую ​​архитектуру, как IRC, где у вас есть любое количество серверов, одноранговых между собой, к которым подключаются клиенты. По крайней мере, на полпути к P2P. (Это также в значительной степени архитектура SIP.)

Это действительно зависит от того, что вы подразумеваете под "сервером". Вам не нужен централизованный сервер любым способом. Термин "p2p" по самому определению не подразумевает централизованный сервер.

Но приложения, которые получают данные от других приложений, должны иметь возможность прослушивать входящие tcp / ip-соединения... это обычно считается "серверной" функциональностью, даже если вы не называете ее "серверной". Таким образом, в вашем случае ваше p2p-приложение должно иметь встроенные возможности сервера и клиента (инициирующие соединения).

Другие вопросы по тегам