Ты прав, это не тривиально. Проблема в том, что называется NAT или преобразование сетевых адресов . По сути, IP-адрес вашей локальной сети уникален, но в более широком контексте общедоступного Интернета многие люди, использующие один и тот же маршрутизатор, будут иметь одинаковые общедоступные IP-адреса. Таким образом, учитывая IP и некоторые данные, вы не можете точно сказать, какой человек на другом конце должен получить его.
Наиболее эффективное и простое решение состоит в том, чтобы сторонняя сторона опосредовала соединение, вставляя себя в поток данных. Вместо того, чтобы каждый человек в чате был одновременно «клиентом» и «сервером», существует только один сервер, и он находится в общеизвестном общедоступном месте; тогда все подключаются к нему. Затем сервер управляет связью и отправляет сообщения людям во время чата.
Однако есть и другие решения. Например, вместо использования общеизвестного сервера вы можете использовать общеизвестные порт (ы) : все соединения осуществляются через этот порт (ы). Тогда вам не нужен сервер, но на всех конечных точках этот порт должен быть открыт, что требует предварительной настройки.