Я использую то, что я предполагаю, является "жестко закодированным" адресом
Да. "Жесткое кодирование" означает помещение информации непосредственно в ваш код, вместо использования каких-либо косвенных средств (таких как DNS или простой файл конфигурации). Это общий термин и не ограничивается IP или даже сетью.
Если ваши вызовы connect() относятся непосредственно к IP-адресу - тогда да, вы жестко задаете адрес. Если адрес когда-либо изменится, вам придется перекомпилировать программу.
Всегда ли IPV6-адреса динамические?
Нет. И IPv4, и IPv6 следуют одним и тем же общим правилам:
Предоставление вашим провайдером статических или динамических адресов полностью зависит от того, с каким контрактом вы с ним заключаете (в том числе план, который вы выбираете и т.д.)
Для жилых и небольших бизнес-соединений адреса распределяются провайдером в соответствии с политиками провайдера. Вы можете получить один публичный IPv4-адрес или дюжину, вы можете получить IPv6 /64 или /48, эти распределения могут быть статическими или они могут меняться каждый день - все зависит от контракта, который вы подписали с провайдером.
То, как вы назначаете адреса своим серверам и другим компьютерам в вашей локальной сети, полностью зависит от вас. Если вы хотите, чтобы адрес устройства оставался статичным, вы можете это сделать.
Это правда, что динамическое назначение через SLAAC в IPv6 немного более распространено, чем DHCP в IPv4. Однако «динамический» не означает, что адрес изменится. Действительно, с IPv6 SLAAC одно и то же устройство обычно будет всегда выбирать один и тот же адрес навсегда.
Наконец, ничто не мешает вам вручную настроить фиксированный адрес для устройства. Это совершенно нормально в IPv6.
Или чтобы переключиться на сеть IPV6, мне нужно было бы получить статический адрес IPV6 для жесткого кода в моем приложении?
Вы не должны жестко задавать конкретные адреса в вашем приложении.
Я думаю, я больше спрашивал о том, как избежать жесткого кодирования адреса в приложении
Разместите их где-нибудь за пределами приложения. Два наиболее распространенных метода:
использование DNS - то есть настройка доменного имени для указания на ваш сервер;
предоставление механизма конфигурации - такого как файл .ini, или реестр, или что-то еще полностью.
Я думаю, что мне нужно получить доменное имя ... а затем "жесткий код" DNS-имя IPV6 в моем приложении
Да. Вы все еще что-то жестко программируете (доменное имя), но, по крайней мере, доменное имя с меньшей вероятностью изменится - тогда как IP-адрес сервера может иметь много причин для изменения. (Например, сервер может быть перемещен в другое место, или вся его сеть может быть реструктурирована или переключена на другого интернет-провайдера.)
Хотя я бы сказал, что не существует такой вещи, как «DNS-имена IPv6». Доменное имя может относиться как к адресам IPv4, так и к адресам IPv6 одновременно, и оно может даже иметь несколько адресов одного типа.
Хорошо написанная программа попробует все найденные адреса (например, с помощью функции getaddrinfo ()). Это позволяет ему работать как в сетях только с IPv4, так и только с IPv6, а также в смешанных сетях.