Как получить IP-адрес и номер порта, назначенные .NET - PullRequest
7 голосов
/ 30 мая 2011

У меня есть два приложения Windows Forms, одно из которых выступает в качестве сервера (то есть Winform: роль сервера ), а другое - в качестве клиента (то есть Winform: Роль клиента ),В моей настройке локальной сети есть 6 компьютеров, и эти компьютеры подключены друг к другу через 8-портовый коммутатор, и у каждого компьютера есть более одной карты локальной сети.

На одном компьютере работает [Winform: роль сервера] ипять других работают под [Winform: клиентская роль].В [Winform: роль сервера] я использую следующий код для получения локального IP-адреса , номера порта и [Winform: роль сервера] прослушивать все входящие запросы TCP в соответствии с этим автоматически назначаемым IP-адресом и номером порта.

Dim Listener As System.Net.Sockets.TcpListener
Dim Client As New System.Net.Sockets.TcpClient
Dim Message As String = ""

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Listener = New System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 0)
    Listener.Start()
End Sub

Как все [Winform: роль клиента] знают мои [Winform:Роль сервера] IP-адрес и номер порта во время выполнения?

Мне нужно уточнить свое намерение.Мой текущий подход к моему намерению может быть неверным.Я пытаюсь создать «сеть клиент-сервер с нулевой конфигурацией», и это «подключи и работай».Сервер будет знать, где находится клиент, и наоборот.Я знаю, что есть программа (то есть MaxiVista), которая сделала это точно.

MaxiVista имеет два приложения, то есть сервер и клиент.Пользователям нужно только запустить серверное приложение на ПК, обозначенном как роль сервера, и запустить клиентское приложение на другом ПК, обозначенном как роль клиента.Тогда сервер сможет найти всех исполняющих клиентов в одной локальной сети.

Мое намерение именно это.Подключи и играй «клиент-сервер сети нулевой конфигурации» в той же локальной сети.

Ответы [ 3 ]

3 голосов
/ 30 мая 2011

Ну, на самом деле это не так.

Вы можете настроить DNS, например, для yourappserver, чтобы он указывал на ваш сервер, а затем подключать к нему клиентов, но это, очевидно, немного сложно (плюсжесткое кодирование значения - не лучший способ сделать это).

То, что вы можете использовать, - это какое-то служебное объявление, например, через mDNS .Это работает, когда сервер периодически объявляет: «Я маленький сервер, маленький и толстый (сервер WhwhatYourAppIsCalled на порту 12345)», а ваши клиенты прослушивают такие запросы или даже запрашивают их («есть ли сервер Wh whatYourAppIsCalled вокругВот?").См. Также это: http://en.wikipedia.org/wiki/Zero_configuration_networking#Service_discovery

(В крайнем случае вы могли бы заставить сервер транслировать свое присутствие в сеть и заставить клиентов прослушивать такие широковещательные рассылки, но тогда вы в основном повторно внедряете mDNS)

2 голосов
/ 30 мая 2011

Преобразование из известного имени машины в IP-адрес выполняется службой именования, DNS является стандартным. Поговорите с администратором вашей локальной сети, если вы не можете заставить работать TcpClient.Connect (string, int).

Вы не можете позволить серверу начать слушать порт 0 таким образом. Это должен быть общеизвестный номер порта, иначе клиенты не будут знать, какой номер порта использовать в вызове Connect (). Выберите число, любое число, превышающее тысячу. Например, 1667. Если возникнет конфликт с другим TCP-сервером, работающим на этом компьютере с использованием того же номера порта, вы это выясните. На клиентах имя сервера и номер порта входят в настройку, поэтому администратор локальной сети может легко их изменить.

2 голосов
/ 30 мая 2011

Клиенты не могут автоматически определить IP-адрес сервера.Вот несколько вариантов решения вашей проблемы:

  • Каждый клиент имеет своего рода данные инициализации, которые сообщают ему, где находится сервер (это может быть база данных, ini-файл и т. Д.).Эти данные, вероятно, будут храниться локально.
  • На сервере есть какие-то данные инициализации, которые сообщают ему, где находятся клиенты.Затем сервер может использовать эту информацию либо для связи напрямую с клиентом, либо для записи собственного IP-адреса в файл / базу данных на клиентском компьютере, который ищет клиент.
...