КФ МГТУ им. Н.Э. Баумана. ЛАБОРАТОРНАЯ РАБОТА № 3 «Разработка клиент-серверных приложений на языке Python»
Цель работы: сформировать навыки разработки клиентских и серверных приложений на языке программирования Python.
Задачи: изучить технологию клиент-серверного программного общения. Разработать в соответствии с вариантом клиент-серверное приложение на языке программирования Python.
Теоретические сведения
Под web-приложением будет пониматься программа, основной интерфейс пользователя которой работает в стандартном WWW-браузере под управлением HTML и XML-документов. Для улучшения качества интерфейса пользователя часто применяют JavaScript. Следует заметить, что интерфейс можно построить на Java- или Flash-апплетах, однако, такие приложения сложно назвать webприложениями, так как Java или Flash могут использовать собственные протоколы для общения с сервером, а не стандартный для WWW протокол HTTP. CGI-сценарии Классический путь создания приложений для WWW — написание CGI-сценариев (иногда говорят — скриптов). CGI (Common Gateway Interface, общий шлюзовой интерфейс) – это стандарт, регламентирующий взаимодействие сервера с внешними приложениями. В случае с WWW, web-сервер может направить запрос на генерацию страницы по определенному сценарию. Этот сценарий, получив на вход данные от web-сервера (тот, в свою очередь, мог получить их от пользователя), генерирует готовый объект (изображение, аудиоданные, таблицу стилей и т.п.). При вызове сценария Web-сервер передает ему информацию через стандартный ввод, переменные окружения. Два основных метода передачи данных из заполненной в браузере формы Webсерверу (и CGI-сценарию) — GET и POST. В зависимости от метода данные передаются по-разному. В первом случае они кодируются и помещаются прямо в URL, например: http://example.com/cgi-bin/a.cgi?a=1&b=3. Сценарий получает их в переменной окружения с именем QUERY_STRING. В случае метода POST они передаются на стандартный ввод. Для корректной работы сценарии помещаются в предназначенный для этого каталог на web-сервере (обычно он называется cgi-bin ) или, если это разрешено конфигурацией сервера, в любом месте среди документов HTML. Сценарий должен иметь признак исполняемости. В системе Unix его можно установить с помощью команды chmod a+x.
Выполнение работы
Задание: разработайте приложение-сервер, ведущее список соединений с различных адресов, в котором для каждого адреса клиента хранится число байт, переданное серверу от клиента и число соединений с данного адреса. При соединении клиенту передается информация о соединениях с ним. Протестируйте работу сервера с помощью приложения telnet.
Листинг программы для сервера:
import socket
import threading
import sys
s = socket.socket(
socket.AF_INET,
socket.SOCK_STREAM,
)
s.bind(
(«localhost», 1225)
)
s.listen(5)
print(» Server is alive»)
users = []
u_addr = []
u_b = []
u_n = []
c_c = []
def listen_u(user, addr):
print(«Sound on :P»)
x = 0 # first message
z = 0 # poryadok v massive
n = 0 # if no name
while True:
data = user.recv(4096)
ud = data.decode(«utf-8»)
x += 1
if x == 1:
for i in u_n:
if ud == i:
n += 1
c_c[z] += 1
break
else:
z += 1
if n == 0:
u_b.append(0)
c_c.append(1)
u_n.append(ud)
#user.send(«Numb of connections: «.encode(«utf-8″) + c_c)
if x != 1:
u_b[z] += sys.getsizeof(ud)
print(f»User {u_n[z]} sent: {ud}»)
else:
user.send(f»Количество подключений: {c_c[z]}».encode(«utf-8»))
if ud == «Bye»:
user.send(«Bye».encode(«utf-8″))
print(u_n + c_c + u_b)
break
def start_serv():
while True:
u_sock, addr = s.accept()
print(f»User {addr[1]} connected o/»)
#print(u_sock)
users.append(u_sock)
u_addr.append(addr[1])
listen_accepted_u = threading.Thread(
target=listen_u,
args=(u_sock, addr,)
)
listen_accepted_u.start()
if __name__ == «__main__»:
start_serv()
Листинг программы для сервера:
import socket
from threading import Thread
client = socket.socket(
socket.AF_INET,
socket.SOCK_STREAM,
)
client.connect(
(«localhost», 1225)
)
def listen_s():
while True:
data = client.recv(4096)
print(data.decode(«utf-8»))
if data.decode(«utf-8») == «Bye»:
client.close()
break
def send_s():
listen_t = Thread(target=listen_s)
listen_t.start()
x = input(«Your name: «)
client.send(x.encode(«utf-8»))
while True:
x = input(«-«)
if x != «»:
client.send(x.encode(«utf-8»))
else:
client.send(«Bye».encode(«utf-8»))
#client.close()
break
if __name__ == «__main__»:
send_s()
Результат работы:
Рисунок 1 – Результат выполнения программы
Вывод: в ходе выполнения лабораторной работы были сформированы практические навыки написания клиентских и серверных приложений на языке Python, изучена технология клиент-серверного программного общения; разработано клиент-серверное приложение на языке Python в соответствии с вариантом.
или напишите нам прямо сейчас:
Здравствуйте. Скажите пожалуйста, планирую поступать в магистратуру на факультет Психологии « Психология личности»в РГГУ скажите пожалуйста, есть ли у вас, ответы на вступительные экзамены? так как, планирую, сделать акцент на бюджет. Спасибо.
Арсений, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Дистанционная помощь в защите ВКР
Анастасия, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте. Нужна срочно практическая часть вкр, третья глава. Скину похожие работы, на которые можно ориентироваться
Александр, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
вкр по теме: экологический туризм России : анализ состояния, проблемы и перспективы
Людмила, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте вы защищаете ВКР?
Ольга, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Написать магистерскую ВКР на тему «Совершенствование логистических бизнес-процессов на примере торговой компании». Не менее 100 страниц.
Миша, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Здравствуйте нужна работа Вкр
Лена, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.
Написать ВКР 3 раздела Тема строительство строительство жилого дома с применением каркасно-монолитных технологий Антиплагиат от 75% ПЗ и чертежи
Владимир, здравствуйте! Прошу Вас прислать всю необходимую информацию на почту info@otlichnici.ru и написать что необходимо выполнить. Я посмотрю описание к заданиям и подскажу вам по стоимости и срокам выполнения.