2010-08-02 2 views
2

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

+0

Взгляните на SignalR https://www.asp.net/signalr –

ответ

5

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

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

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

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

2

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

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

+0

Это - коррент, я считаю, что пользователям не нужно будет иметь внешний ip. Является ли это возможным? – user380798

+0

Их машинам не нужны внешние адресуемые IP-адреса. т.е. они могут находиться в локальной сети. НО их маршрутизаторы/модемы - части, которые действительно подключаются к Интернету, будут иметь внешние адресные IP-адреса. Они просто должны быть настроены для пересылки портов. Это можно сделать вручную или через UPnP. – GrandmasterB