Что значит назначить «виртуальное имя хоста» серверу / клиенту на моей машине?Как мне это сделать? - PullRequest
0 голосов
/ 19 ноября 2011

Я начинаю с задания по сетевому программированию, которое у меня есть. Инструкции следующие:

а. Создайте n клиентов и серверы TCP (вместе клиент и сервер на тот же хост формирует одноранговый узел), где n является входным параметром.

б. Назначьте имя виртуального хоста для каждого узла, например, Peer1, Peer2 и т. Д.

с. Создайте дополнительный сервер, который будет действовать как центральный сервер для все сверстники.

д. Пусть все n одноранговые узлы подключаются к центральному серверу, отправляя ему Сообщение «Привет».

е. Каждую секунду центральный сервер посылает случайный выбор n/2 пиров имя другого, случайного пира.

е. Узлы, с которыми связался центральный сервер подключиться к пиру, который им дали, и отправить его случайным образом номер, который отражается обратно.

например. для 2 пиров:

Peer1: отправка «Привет» в Central.

Central: получено «Hello» от Peer 1.

Peer2: отправка «Привет» в Central.

Central: получено «Hello» от Peer 2.

Central: отправка «Peer2» на Peer1.

Peer1: получил «Peer2» от Центрального.

Peer1: отправка «5890245» Peer2.

Peer2: получено «5890245» от Peer1.

Peer2: отправка «5890245» Peer1.

Peer1: получено «5890245» от Peer2.

. , .

Меня смущает инструкция " virtual hostname " на шаге b. Что это значит?

Для сервера в Python я могу сделать это:

hostname = #????
mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mySocket.bind((hostname, 50008))
mySocket.listen(1)

Если hostname равен 'localhost' или '', он будет прослушивать только соединения с этого компьютера. Но если я попытаюсь дать имя типа «Peer1», я получу:

socket.gaierror: [Errno 8] указано ни имя, ни имя сервера, либо неизвестно

предположительно, потому что он пытается подключиться к хосту с именем "Peer1", который не существует.

Так как я могу отправить одному из моих пиров «имя» другого и подключить его, если они все на моей машине? Я думаю, что мне нужно было бы просто дать им номер порта и сделать так, чтобы все они были "localhost", но, похоже, это не то, о чем просят.

Если у вас есть независимый от языка ответ или ответ, зависящий от другого языка, это будет так же цениться! Спасибо!

1 Ответ

1 голос
/ 22 ноября 2011

Назначение говорит вам сделать следующее:

Создать группу пар клиент / сервер.Каждая пара представляет одного Пира, где количество Пиров указано пользователем.Присвойте уникальное имя (или виртуальное имя хоста) каждому создаваемому одноранговому узлу.

Затем пусть каждый сокет сервера однорангового узла откроет порт прослушивания, а его сокет клиента подключится к центральному серверу.При подключении клиентский сокет отправляет назначенное ему имя узла на сервер, чтобы сервер мог хранить список всех доступных узлов.

Затем каждую секунду центральный сервер получает случайный выбор половины подключений изего список и, для каждого соединения, которое он выводит, записывает имя случайного Пира в это соединение.

На принимающей стороне, когда клиентский сокет Пира получает имя от центрального сервера, создайте отдельное соединениек сокету сервера, который работает на указанном Peer.Это означает, что центральный сервер должен отслеживать, какой IP принадлежит тому или иному узлу (который он может получить, когда к нему подключается узел), и включать этот IP в сообщение, которое он отправляет, чтобы получатель знал, куда подключиться..

После того, как это отдельное соединение установлено, напишите в него случайное число и дождитесь его возвращения.

Когда сокет сервера Peer получает сообщение, отправьте его обратно наклиент пришёл.

...