Обнаружение хоста
Обнаружение вручную, клиент A знает, кто является клиентом B
Обнаружение через широковещательный UDP, который используется многими играмидля игры по локальной сети.Клиент отправляет пакет на широковещательный адрес для своей подсети.Участники могут выбрать эту трансляцию и ответить.Недостатком является то, что это ограничено текущей подсетью.Более общий INADDR_BROADCAST (255.255.255.255) работает для всех подсетей в локальной ссылке, но он не может быть маршрутизирован, поэтому не будет работать через Интернет (это то, что использует автоматическая конфигурация DHCP).
Обнаружение через центральный (рандеву) сервер.Каждый отдельный клиент знает адрес сервера, а последний информирует их друг о друге.Этот метод используется IRC, Voip, IM и большинством одноранговых сетей.
Связь
После того, как начальное обнаружение выполнено, вы хотитебыть в состоянии разговаривать друг с другом.В интернете это может быть сложно.В настоящее время большинство людей имеют свой собственный маршрутизатор и сидят за NAT, поэтому прямые подключения невозможны.
Используя сервер Rendezvous, вы можете общаться друг с другом, используя сам сервер.клиент A сообщает серверу, что сказать, и, в свою очередь, сообщает клиенту B, поскольку оба клиента имеют исходящее соединение с сервером.
Клиенты могут общаться друг с другом без прокси-сервера.Для этого требуется DMZ, переадресация порта или UPnP.DMZ будет в основном пересылать все входящие соединения по всем портам на заданный локальный IP-адрес.Переадресация портов только перенаправляет определенные порты на локальные IP-адреса.UPnP немного более продвинут, клиент запрашивает, чтобы маршрутизатор временно перенаправил порт на него, и вы сообщаете другому клиенту через сервер рандеву, где подключиться.
Реализация приложения для чата
самое простое решение вашей проблемы - это использование центрального сервера, известного всем клиентам, который обеспечивает обнаружение хоста и, возможно, связь между клиентами.Если вы хотите, чтобы клиенты общались напрямую, вы можете просто обнаружить прокси-хост, а затем позволить DMz, ручной переадресации портов или UPnP сделать все остальное.
Другим решением было бы просто установить прямую связь через методы обхода NATобсуждалось выше, и выполните ручное обнаружение хоста.
Еще одним решением будет использование общедоступного веб-сервера и «злоупотребление» его способностью вставлять контент для общения друг с другом.