А теперь заставим эти сценарии поработать. Есть два способа запустить их — на одном и том же компьютере или на разных. Чтобы запустить клиент и сервер на одном компьютере, откройте две консоли командной строки, запустите в одной программу сервера, а в другой несколько раз запустите клиента. Сервер работает постоянно и отвечает на запросы, которые происходят при каждом запуске сценария клиента в другом окне.
Например, ниже приводится текст, который появляется в окне консоли MS—DOS, где я запустил сценарий сервера:
C:\…\PP4E\Internet\Sockets> python echo-server.py
Server connected by (‘127.0.0.1’, 57666)
Server connected by (‘127.0.0.1’, 57667)
Server connected by (‘127.0.0.1’, 57668)
В выводе указан адрес (IP-имя компьютера и номер порта) каждого соединившегося клиента. Как и большинство серверов, этот сервер выполняется вечно, ожидая запросов на соединение от клиентов. Здесь он получил три запроса, но чтобы понять их значение, нужно показать текст в окне клиента:
C:\…\PP4E\Internet\Sockets> python echo-client.py
Client received: b’Echo=>Hello network world’
C:\…\PP4E\Internet\Sockets> python echo-client.py localhost spam Spam SPAM Client received: b’Echo=>spam’
Client received: b’Echo=>Spam’ Client received: b’Echo=>SPAM’
C:\…\PP4E\Internet\Sockets> python echo-client.py localhost Shrubbery Client received: b’Echo=>Shrubbery’
Здесь сценарий клиента был запущен три раза, в то время как сценарий сервера постоянно выполнялся в другом окне. Каждый клиент, соединявшийся с сервером, посылал ему сообщение из одной или нескольких строк текста и читал ответ, возвращаемый сервером, — эхо каждой строки текста, отправленной клиентом. И при запуске каждого клиента в окне сервера появлялось новое сообщение о соединении (вот почему там их три). Поскольку сервер выполняет бесконечный цикл, в Windows вам, вероятно, придется завершить его с помощью Диспетчера задач (Task Manager) по окончании тестирования, потому что нажатие комбинации Ctrl—C в консоли, где был запущен сервер, будет проигнорировано — на других платформах ситуация выглядит несколько лучше.
Важно отметить, что клиенты и сервер выполняются здесь на одном и том же компьютере (в Windows). Сервер и клиент используют один и тот же номер порта, но разные имена компьютеров — » и localhost, соответственно, при ссылке на компьютер, на котором они выполняются. В действительности здесь нет никакого соединения через Интернет. Это всего лишь механизм IPC, вроде тех, с которыми мы встречались в главе 5: сокеты прекрасно справляются с ролью средства связи между программами, выполняющимися на одном компьютере.
Использованная литература:
Марк Лутц — Программирование на Python, 4-е издание, II том, 2011