Так что я спрашиваю, что это лучший способ определить его?
Это зависит от того, какое поведение вы хотите. Вот почему API предлагает варианты: один размер не обязательно подходит всем.
На некоторых машинах есть несколько сетевых адаптеров, и на некоторых из этих машин желательно ограничить работу сервера некоторым подмножеством этих адаптеров или даже одним. В таких случаях полезно обеспечить способ привязки сокета к одному адаптеру.
В других случаях желательно, чтобы сервер прослушивал все доступные сетевые адаптеры. В этом случае использование по умолчанию (или явно предоставление IPAddress.Any
) является «лучшим способом» (т. Е. Единственным способом).
Что произойдет, если серверный компьютер имеет динамический IP-адрес? Будет ли это давать ошибку во втором методе, если это с динамическим IP?
Если имеется правильный IP-адрес, он будет работать нормально. Тот факт, что IP-адрес является динамическим, не исключает его использования для прослушивающего сокета TCP.
Если указан неправильный IP-адрес (т. Е. Тот, который не назначен машине), произойдет ошибка.
И как клиентское приложение подключится к серверу, если оно не знает IP-адрес, к которому он подключается (если он динамический)?
Сетевой клиент не может подключиться к сетевому серверу, если он не знает IP-адрес.
Однако сервер, имеющий динамический IP-адрес, не обязательно препятствует клиенту знать адрес.
Даже в нединамическом сценарии наиболее распространенным способом получения IP-адреса клиентом является запрос DNS-сервера, который разрешает текстовое имя на фактический IP-адрес. Существуют службы, предоставляющие разрешение имен DNS для служб или компьютеров с динамическими IP-адресами; они обычно делают это, используя фиксированное доменное имя, присваивая сервер с динамическим адресом субдомену.
Например, вы можете подписаться на услугу от noip.com, купив у них домен skaidar.noip.com
. Затем клиент будет искать это имя, а нормальное разрешение DNS будет переводить на IP-адрес вашего сервера. Для этого типа обслуживания ваш сервер или связанный с ним компьютер активно обновляют информацию о разрешении имени поставщика, если и когда изменяется динамически назначенный IP-адрес; у разных поставщиков есть разные механизмы для этого.
И, конечно же, человек всегда может узнать динамически назначенный IP-адрес, а затем ввести его непосредственно для использования клиентом. :)