2015-04-04 2 views
0

Я просмотрел несколько примеров TcpListeners и TcpClients, и в одном примере на стороне сервера TcpListener объявлен как этотКак определить TcpListener для IP-адреса

TcpListener listener = TcpListener.Create(8080); 
listener.Start(); 

время на другом примере, как это

TcpListener listener = new TcpListener("78.78.78.120", 8080); 
listener.Start(); 

Логично, что первый метод должен использовать внешний IP-адрес по умолчанию для компьютера, где второй метод указан явно.

Итак, я спрашиваю, что это лучший способ определить его? Что произойдет, если серверный компьютер имеет динамический IP-адрес? Будет ли это давать ошибку во втором методе, если это с динамическим IP? И как клиентское приложение подключится к серверу, если оно не знает IP-адрес, к которому он подключается (если он динамический)?

ответ

0

Так что я спрашиваю, что это лучший способ определить его?

Это зависит от того, какое поведение вы хотите. Вот почему 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-адрес, а затем ввести его непосредственно для использования клиентом. :)

Смежные вопросы