Запуск программ, использующих сокеты, на удаленном компьютере

zapusk programm ispolzujushhih sokety na udalennom kompjutere Сетевые сценарии

Чтобы заставить эти сценарии общаться через Интернет, а не в пределах одного компьютера, необходимо проделать некоторую дополнительную работу, чтобы запустить серверный сценарий на другом компьютере. Во-первых, нужно загрузить файл с исходным программным кодом сервера на удаленный компьютер, где у вас есть учетная запись и Python. Ниже показано, как я выгружаю этот сценарий через FTP на сайт, который располагается на компьютере с доменным именем learningpy thon.com, принадлежащем мне. Большая часть информационных строк в следующем примере сеанса была удалена, имя вашего сервера и детали интерфейса загрузки могут отличаться, а кроме того, есть другие способы копирования файлов на компьютер (например FTP-клиенты с графическим интерфейсом, электронная почта, формы передачи данных на веб-страницах и другие — смотрите врезку «Советы по использованию удаленных серверов» ниже, где приводятся некоторые подсказки по использованию удаленных серверов):

C:\\PP4E\Internet\Sockets> ftp learning-python.com

Connected to learning-python.com.

User (learning-python.com:(none)): xxxxxxxx

Password: yyyyyyyy ftp> mkdir scripts ftp> cd scripts ftp> put echo-server.py ftp> quit

После пересылки программы сервера на другой компьютер нужно запустить ее там. Соединитесь с этим компьютером и запустите программу сервера. Обычно я подключаюсь к компьютеру своего сервера через Telnet или SSH и запускаю программу сервера из командной строки как постоянно выполняющийся процесс. Для запуска сценария сервера в фоновом режиме из командных оболочек Unix/Linux может использоваться синтаксис с &; можно также сделать сервер непосредственно исполняемым с помощью строки #! и команды chmod (подробности в главе 3).

Ниже приводится текст, который появляется в окне свободного клиента PuTTY на моем PC при открытии сеанса SSH на сервере Linux, где у меня есть учетная запись (опять же опущены несколько информационных строк):

login as: xxxxxxxx

XXXXXXXX@learning-python.com’s password: yyyyyyyy

Last login: Fri Apr 23 07:46:33 2010 from 72.236.109.185

[…]$ cd scripts

[…]$ python echo-server.py &

[1] 23016

Теперь, когда сервер ждет соединений через Сеть, снова несколько раз запустите клиент на своем локальном компьютере. На этот раз клиент выполняется на компьютере, отличном от сервера, поэтому передадим доменное имя или IP-адрес сервера, как аргумент командной строки клиента. Сервер по-прежнему использует имя компьютера », так как он всегда должен прослушать сокет, на каком бы компьютере ни выполнялся. Ниже показано, что появляется в окне сеанса SSH с сервером learningpython.com на моем PC:

[…]$ Server connected by (‘72.236.109.185’, 57697)

Server connected by (‘72.236.109.185’, 57698)

Server connected by (‘72.236.109.185’, 57699)

Server connected by (‘72.236.109.185’, 57700)

А далее показано, что выводится в окно консоли MSDOS, когда я запускаю клиента. Сообщение «connected by» появляется в окне сеанса SSH с сервером каждый раз, когда сценарий клиента запускается в окне клиента:

C:\\PP4E\Internet\Sockets> python echo-client.py learning-python.com Client received: b’Echo=>Hello network world’

C:\\PP4E\Internet\Sockets> python echo-client.py learning-python.com ni Ni NI

Client received: b’Echo=>ni’

Client received: b’Echo=>Ni’

Client received: b’Echo=>NI’

C:\\PP4E\Internet\Sockets> python echo-client.py learning-python.com Shrubbery

Client received: bEcho=>Shrubbery

Получить IP-адрес компьютера по доменному имени можно с помощью команды ping; для подключения клиент может использовать любую из этих форм имени компьютера:

C:\\PP4E\Internet\Sockets> ping learning-python.com

Pinging learning-python.com [97.74.215.115] with 32 bytes of data:

Reply from 97.74.215.115: bytes=32 time=94ms TTL=47

Ctrl-C

C:\\PP4E\Internet\Sockets> python echo-client.py 97.74.215.115 Brave

Sir Robin

Client received: b’Echo=>Brave’

Client received: b’Echo=>Sir’

Client received: b’Echo=>Robin’

Этот вывод, возможно, излишне сдержан — за кулисами много чего происходит. Клиент, выполняющийся в Windows на моем ноутбуке, соединяется с программой сервера, выполняемой на компьютере, работающем под управлением Linux, находящемся, возможно, на расстоянии тысяч миль, и обменивается с ней данными. Это происходит почти так же быстро, как если бы клиент и сервер выполнялись на одном ноутбуке, при этом используются одни и те же библиотечные вызовы. Изменяется только имя сервера, передаваемое клиентам.

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

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий