Задание №3
Задание
Реализовать серверную часть приложения. Клиент подключается к серверу. В ответ
клиент получает http-сообщение, содержащее html-страницу, которую сервер
подгружает из файла index.html
.
Обязательно использовать библиотеку socket
server.py
import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(("127.0.0.1", 8080))
server_socket.listen(10)
server_socket.settimeout(0.5)
try:
while True:
try:
client_socket, address = server_socket.accept()
with open("index.html", encoding="utf-8") as f:
index_html = f.read().encode()
headers = (
"HTTP/1.1 200 OK\n"
"Content-Type: text/html\n"
f"Content-Length: {len(index_html)}\n"
"Connection: close\n\n"
).encode()
client_socket.sendall(headers + index_html)
except socket.timeout:
pass
except KeyboardInterrupt:
server_socket.close()
Основа программы осталась примерно такой же, как и в предыдущем задании.
Добавилось чтение из index.html
файла с помощью контекстного менеджера with open()
.
Важно при чтении указать правильную кодировку, чтобы не было проблем с кириллицей.
Помимо содержимого HTML-файла, добавляем к запросу заголовки:
HTTP/1.1 200 OK
: версия HTTP и статус ответа.Content-Type: text/html
: формат ответа.Content-Length: {len(index_html)}
: размер ответа. Важный заголовок, дающий клиенту понять, когда закончится ответ. Без него соединение не остановится.Connection: close
: даёт клиенту понять, что соединение нужно остановить.