У меня есть приложение на базе Windows, которое может выполнять какую-то работу.
Я хочу сделать приложение iOS, которое может отправлять сообщения через Интернет в конкретное приложение, запущенное на конечном компьютере.
Итак, мой вопрос заключается в том, как связать мой клиент iOS и серверные приложения Windows без указания IP-адреса и порта, просто используя какой-то ключ, подобный тому, который работает в Team Viewer, например: серверное приложение имеет набор ключей и паролей и клиентское приложение из другая сеть может подключаться к серверному приложению с помощью соответствующего ключа и правильного пароля.
Мне не нужно делиться экраном или чем-то другим, просто хотите отправить/получить двоичные сообщения.
Есть ли способ подключения приложений без использования некоторых видов веб-сервисов?
Или использовать веб-службу только для установления соединения для клиентских и серверных приложений, а не для управления очередью сообщений?
Я считаю, что вам нужен канал одноранговой связи между серверным приложением и iOS, основная проблема здесь заключается в том, что вам нужно перехватить NAT между этими двумя устройствами.
Для достижения этой цели существует несколько способов: UDP Hole Punching - один из них, который легко реализовать и имеет высокий уровень успеха при обходе NAT.
Чтобы установить соединение с этим методом, вам понадобятся три компонента:
Peer: традиционный клиент/сервер UDP, он аналогичен вашему UDP-приложению, которое работает в локальной сети.
Сервер STUN: сервер для простого обхода пользовательского протокола данных (UDP) через трансляторы сетевых адресов (NAT). он просто помогает вам сопоставить свой адрес локального компьютера с общедоступным.
Вам не нужно писать или развертывать свои собственные, есть несколько STUN-серверов, готовых для публичного использования, 203.183.172.196:3478 (s1.taraba.net)
является одним из них (есть также некоторые версии с открытым исходным кодом, если вам нужно разверните свой собственный, например, http://sourceforge.net/projects/stun/).
Скомпилированный список общедоступных серверов STUN: https://gist.github.com/zziuni/3741933
Вот простая реализация STUN Client с хорошим объяснением: http://www.codeproject.com/Articles/18492/STUN-Client
Сервер Rendezvous: простой публичный сервер, который содержит общедоступные адреса для всех онлайн-партнеров.
Шаги коммуникации:
Объявление
1- Запрос Peer непосредственно с STUN Server, чтобы найти его Public IP: адрес порта.
2- Peer объявляет о себе на Rendezvous Server и устанавливает его статус для связи.
3- A Peer должен периодически обновлять свое состояние и публичный адрес.
соединение
1- Приложение найдет открытый адрес целевого Peer из Rendezvous Server (на основе ID/Token,...)
2- Приложение установит UDP-соединение с предоставленным публичным IP-адресом: адрес порта совпадает с традиционной связью UDP в локальной сети.
3- Приложение должно проверять сервер Rendezvous для обновления целевого равноправного публичного адреса/состояния.
ПРИМЕЧАНИЕ. Перфорация отверстий UDP не будет работать со всеми комбинациями NAT. В таких ситуациях вы должны использовать сервер ретрансляции для установления соединения, он по существу работает как связь между грушами, которые не могут видеть друг друга (блокируются их NAT)
Я предлагаю вам ознакомиться с http://www.brynosaurus.com/pub/net/p2pnat/ для получения дополнительной информации об одноранговой связи через NAT.