Как создать экземпляр класса Socket в Java? - PullRequest
2 голосов
/ 20 февраля 2010

Я знаю, что класс Socket может быть создан таким образом (в качестве примера):

new Socket("taranis", 7);

где "taranis" - это имя сервера в локальной сети. В связи с этим у меня два вопроса:


1. Если мои компьютеры не образуют локальную сеть, но подключены к Интернету, могу ли я использовать IP-адреса компьютеров для создания экземпляра сокета?


2. Как мои компьютеры получают имена в локальной сети? Я даю имена компьютерам при создании сети.

P.S. Я считаю, что компьютеры могут самостоятельно устанавливать сеть (используя zeroconf). Кто тогда дает имена компьютерам и как я могу знать эти имена заранее (мне нужно, чтобы они написали мой код).

Ответы [ 2 ]

2 голосов
/ 20 февраля 2010
  1. Да, вы можете создать сокет, используя IP-адрес, вы можете сделать это так: new Socket("192.168.1.00",8888)

  2. Когда вы устанавливаете ОС на свой компьютер, обычно одним из шагов, который заставляет вас пройти ОС, является присвоение имени вашей машине. У каждой ОС также есть способ изменить эти имена после установки. Итак, у каждого из ваших компьютеров, вероятно, есть имя. Однако сложная часть заключается в том, чтобы одна машина узнала имя другой. Это можно сделать несколькими способами. Одним из них является использование DNS-сервера . Это своего рода посредник, который переводит имя (например, Computer1) на его IP-адрес (192.1.168.1.100). Вы также можете сохранить это отображение локально, вы можете поместить его в файл hosts . Это сопоставление между именами и IP-адресами, и если вы используете этот метод, вам необходимо убедиться, что эти файлы хостов выстроены на всех компьютерах.

  3. Zeroconf - интересный протокол. Это работает так, как один компьютер создает именованный сервис, а второй компьютер просто ищет сервис по имени, и как только он находит сервис, он может подключиться к нему. Когда служба обнаружена, подключающийся клиент может запросить IP-адрес и порт для подключения.

2 голосов
/ 20 февраля 2010

Перед программированием сокетов, вам нужно немного узнать о сети. К сожалению, на ваши вопросы не так просто ответить, так как это зависит от конкретной конфигурации вашей сети. Вот несколько коротких ответов, но они могут быть неверными из-за зависимости от конкретной конфигурации. Вам лучше почитать о TCP / IP, например здесь .

  1. Да. Но я сомневаюсь, что ваши компьютеры не образуют локальную сеть (LAN). Если они это сделают, вы можете использовать их IP-адрес локальной сети. Чтобы найти ipaddress, вы можете использовать команду «ipconfig» в «Командной строке» в Windows и «ifconfig» в unix. Выходными данными является конфигурация каждого сетевого интерфейса на компьютере.

  2. Да, вы можете настроить имя каждого компьютера на компьютере.

Для программирования обычно вы используете ipaddress (используйте имя, когда имя может быть динамически назначено одному из компьютеров (с использованием динамического DNS)). IP-адрес также может быть (и довольно часто) назначается динамически с использованием DHCP-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...