можно ли написать программу TCP P2P без сервера? Когда я гуглил этот вопрос, я нашел кое-что о обходе NAT, UPnP, можно ли их как-то использовать?
TCP P2P без сервера
Ответы (2)
Да, вы можете (где, как указывает GrandmasterB, у каждого узла есть как серверные, так и клиентские сокеты). Однако NAT причинят вам боль, как вы, возможно, уже знаете.
Если вы не можете использовать миддлбоксы (серверы на общедоступных IP-адресах, к которым подключаются ваши клиенты (*)) — а они вам могут не понадобиться, потому что они скорее противоречат сути P2P — и вы не возражаете описать свой сведения о соединении с SDP, вы можете попробовать Установление интерактивного подключения.
По сути, ICE пробует разные стратегии подключения. Это подключаемая архитектура, поэтому вы можете добавлять свои собственные стратегии. По умолчанию ICE описывает методы обхода UDP, но расширение чтобы разрешить TCP-подключение находится в разработке.
(*) Вы всегда можете попробовать такую архитектуру, как IRC, где у вас есть любое количество серверов, пирингующих друг с другом, к которым подключаются клиенты. По крайней мере, это на полпути к P2P. (Такая же архитектура используется SIP.)
Это действительно зависит от того, что вы подразумеваете под «сервером». Вам ни в коем случае не нужен централизованный сервер. Термин «p2p» по своему определению не подразумевает наличия централизованного сервера.
Но приложения, которые получают данные от других приложений, должны иметь возможность прослушивать входящие соединения tcp/ip... обычно это считается «серверной» функциональностью, даже если вы не называете ее «сервером». Таким образом, в вашем случае ваше p2p-приложение должно иметь встроенные возможности как сервера, так и клиента (инициация соединений).