Форум программистов, компьютерный форум, киберфорум
Фаер
Войти
Регистрация
Восстановить пароль

Python. Web-приложения.

Запись от Фаер размещена 09.01.2013 в 17:36
Показов 5461 Комментарии 0
Метки python, сервер

Пожалуй, каждый в душе мечтает завести свой собственный сайт. По хорошему, для этого Вам нужно арендовать "белый" IP-адрес, который будет виден из Интернета. Так же можно прибегнуть к услугам особых компаний, которые предоставляют домены взамен на право размещать на Вашем сайте рекламу. Кроме того, чтобы создать серьёзный сайт, Вам нужно знать HTML, CSS и ещё тучу всякой ереси. Пока что в такие дебри Мы лезть не будем, а посмотрим как можно создать локальный сервер, не доступный из Интернета. При этом, Вам не обязательно иметь второй компьютер или целую локальную сеть. Клиенты будут запускаться прямо на том же ПК, что и сервер, только в других процессах.

Первое, что Нам нужно, это IP-адрес будущего сервера(то есть, Вашего компьютера) в сети. Нажмите Пуск->Выполнить. Впишите в поле для ввода 'cmd', чтобы вызвать командную строку. Затем напишите ipconfig/all. В ответ Вы получите информацию о доступных на данном компьютере сетевых интерфейсах. Теперь Вам нужно найти что-то типа "Подключение по локальной сети - Internet адаптер". В этом разделе найдите строку 'IP-адрес .......x.x.x.x'. У Меня, например, там написано "192.168.0.2". Если, проделав вышеописанные операции, Вы так и не нашли IP, не беда, всегда можно использовать адрес 127.0.0.1, а можно и, вообще, вместо адреса ввести строку 'localhost' и все дела.

Далее. Вам нужно знать, что такое сокеты. Строгое определение этого понятия можно найти в Википедии и т.п. сайтах. Если же сказать просто и кратко, то сокет - это труба, по которой процессы могут гонять информацию друг другу. Естественно, эти процессы могут выполняться на компьютерах, связанных друг с другом через WWW. Сокет, в общем-то, и является основным инструментом передачи данных в Интернете. Следует заметить, что сокеты присоединяются друг к другу через порт. Каждый порт имеет свой ID - номер.

Желательно, по крайней мере пока, не использовать порты с номерами 0-1023, так как они зарезервированы под стандартные протоколы передачи данных.

В общем и целом, для того, чтобы создать элементарный сервер и клиентов, знать что-то ещё не очень-то и нужно. Следовательно, Мы переходим непосредственно к написанию программ.

Сервер

Сервер - программа, которая подключается к порту и "слушает" его. Если обнаруживается входящее подключение, сервер принимает информацию от клиента и отправляет ответ.

Python
1
2
3
4
5
6
7
8
9
10
11
12
from socket import *
 
sock=socket(AF_INET,SOCK_STREAM)#создаём сокет TCP/IP(в подробности пока не вдаёмся)
sock.bind(('',1808))       #указываем номер порта, к которому ожидается подключение
sock.listen(2)          #указываем максимальное кол-во ожидающих клиентов
 
while True:
    connection,address=sock.accept()#принимаем входящее поключение
    data=connection.recv(64)#читаем данные блоками по 64 байта
    print(data.decode())
    connection.send(b'Hi,client!')#отправляем ответ
    connection.close()
Итак, Мы создаём сервер TCP/IP, который прослушивает порт 1808. Номер порта, к которому подключается сервер должен совпадать с таковым у клиента. Переданная в bind() пустая строка, означает, что сервер будет использовать все доступные сетевые интерфейсы. Обратите внимание, что после того, как клиент подключился, Мы используем не сокет, а поключение(connection). Так же Вы, должно быть, заметили, что перед отправкой данные переводятся в строки байтов. Не забывайте об этом, сокеты работают только с байтами.

Клиент

Клиент - программа, которая подключается к порту и передаёт на сервер некоторую информацию, а затем получает ответ.

Python
1
2
3
4
5
6
7
8
9
from socket import *
 
sock=socket(AF_INET,SOCK_STREAM)
sock.connect(('192.168.0.2',1808))
sock.send(b'Hello,Server!')
 
data=sock.recv(64)#читаем 64-байтовый блок
sock.close()
print(data.decode())
Так же создаём объект сокета TCP/IP, затем поключаем его к серверу(если с IP возникли какие-то проблемы, можете вместо него вписать строку 'localhost'), передаём на сервер строку байтов и получаем ответ.

Теперь запустите сервер, а затем клиент. В результате, каждый из них должен вывести на экран строку, полученную от собеседника(не забывайте, что при работе в консоли нужно писать input(), чтобы успеть прочитать то, что выводит программа).

Если помните, в программе сервера, с помощью метода listen(), Мы указали максимальное кол-во ожидающих клиентов, равное двум. Это означает, что, пока сервер обрабатывает запрос одного клиента, ещё два могут стоять в очереди. А вот если попробует подключиться третий(четвёртый, если считать того, с которым сервер уже работает), то его запрос будет отклонён. Конечно, в данной программе такая проблема вряд ли возникнет, но так, на будущее, скажу, что решить её можно с помощью старых-добрых параллельных потоков.

А теперь давайте передадим через сокет какой-нибудь файл, например html. Если Вы не знаете HTML, то просто скопируйте код, размещённый ниже и занесите его в текстовый файл. Затем измените расширение файла на .html и получите самый настоящий HTML-файл.

HTML5
1
2
3
4
5
6
7
8
9
<!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Web</title>
</head>
<body>
<p>Hello,man!</p>
</body>
</html>
Теперь перейдём к серверу:

Python
1
2
3
4
5
6
7
8
9
10
11
12
from socket import *
 
file=open('C:\\page.html','rb')#открываем файл в режиме чтения байтов
sock=socket(AF_INET,SOCK_STREAM)
sock.bind(('',1808))
sock.listen(2)
 
while True:
    connection,address=sock.accept()
    for line in file:                  #читаем строки байтов из файла
        connection.send(line)    #и отправляем их клиенту
    connection.close()
Как видите, даже новых функций/классов не понадобилось, всё элементарно.

Клиент:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
from socket import *
import os
from time import sleep
 
file=open('C:\\Documents and Settingsользовательабочий стол\\page.html','wb')
 
sock=socket(AF_INET,SOCK_STREAM)
sock.connect(('192.168.0.2',1808))
sleep(0.25)
data=sock.recv(512)
file.write(data)
 
file.close()
os.startfile('C:\\Documents and Settingsользовательабочий стол\\page.html')
В клиенте тоже, в общем-то, ничего сложного нет. Создаём сокет, подключаем его к порту, читаем строку длиной 512 байтов и записываем её в файл. После того, как файл написан, открываем его с помощью os.startfile. Так как это HTML-файл, открыт он будет, соответственно, в браузере. В общем, всё кратко и просто.
Метки python, сервер
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru