Last active
August 3, 2021 12:58
-
-
Save sashachabin/82385379fe4eabc885e3f4fe9caab866 to your computer and use it in GitHub Desktop.
УрФУ. Socket-сервер, который отдает статикой файлы по HTTP при обращении по IP адресу.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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