Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save sashachabin/82385379fe4eabc885e3f4fe9caab866 to your computer and use it in GitHub Desktop.
Save sashachabin/82385379fe4eabc885e3f4fe9caab866 to your computer and use it in GitHub Desktop.
УрФУ. Socket-сервер, который отдает статикой файлы по HTTP при обращении по IP адресу.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import socket
# Данные для подключения к серверу
HOST = "127.0.0.1"
PORT = 8080
# Статусы ответа сервера
STATUS = {
200 : b"HTTP/1.1 200 OK\nContent-Type: text/html; charset=utf-8\n\n\n",
404 : b"HTTP/1.1 404 Not Found\nContent-Type: text/html; charset=utf-8\n\n\n"
}
# Создание сокета
s = socket.socket()
s.bind((HOST, PORT))
# Запуск режима прослушивания
s.listen(1)
while True:
# Получение сокета и адреса клиента
conn, addr = s.accept()
request = conn.recv(1024)
# Переход к следующему шагу цикла, если клиент отключился
if not request:
continue
headers = request.decode("utf-8")
# Получение пути (после метода GET, POST и т.д.)
path = headers.split(" ")[1]
try:
# По "/" происходит открытие index.html
# Остальная статика доступна по прямому обращению к файлам на сервере
path = "./index.html" if path == "/" else path[1:]
# Открытие файла по заданному пути
file = open(path, "rb")
# Статус успешной отправки с выводом содержимого запрошенного файла
response = STATUS[200] + file.read()
conn.send(response)
file.close()
except IOError:
# Статус "не найдено" с сообщением пользователю об ошибке 404
error = STATUS[404] + b"404 Страница не найдена"
conn.send(error)
conn.close()
s.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment