#python #sockets #http #tcp #decode
#python #сокеты #http #tcp #расшифровать
Вопрос:
У меня возникли проблемы с тем, чтобы мой очень простой и простой TCP-сервер правильно работал с http-запросами. Это то, что у меня есть до сих пор
from socket import *
import sys
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind(('', 4567))
serverSocket.listen(1)
while True:
print('Ready to serve...')
connectionSocket, addr = serverSocket.accept()
print("connected from: ", addr)
try:
message = connectionSocket.recv(1024)
filename = message.split()[1]
f = open(filename[1:])
outputdata = f.read()
connectionSocket.send("HTTP/1.1 200 OKrn")
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i].encode())
connectionSocket.send("rn".encode())
connectionSocket.close()
except IOError:
connectionSocket.send("file not found")
serverSocket.close()
sys.exit()
Ошибка возникает из инструкции open . Я не совсем понимаю, как организовано возвращаемое значение этой строки кода.
message = connectionSocket.recv(1024)
Я знаю, что возвращаемое значение выражается в байтах, но когда я пытаюсь использовать функцию, чтобы превратить его в строку, например decode(), я также получаю ошибки
У меня есть файл .py и HTML-файл, находящиеся в одном каталоге на моем локальном компьютере, и способ, которым я это проверяю, заключается в том, что я просто запускаю это, открываю браузер и набираю
http://127.0.0.1:4567/helloworld.html
Затем мой код быстро выходит из строя после получения HTTP-запроса.
Любая помощь будет принята с благодарностью!
Комментарии:
1. «я также получаю ошибки» какие ошибки? «Затем мой код быстро выходит из строя после получения HTTP-запроса». вы получаете какие-либо указания на то, почему он выходит из строя?
Ответ №1:
С вашим кодом существует множество проблем, и, поскольку вы не указываете, какие конкретные проблемы вас беспокоят, вот что я вижу:
connectionSocket.send(outputdata[i].encode())
connectionSocket.send("rn".encode())
Похоже, что после каждого символа, который вы отправляете обратно клиенту, отправляется новая строка.
Кроме того, он не обрабатывает отключение клиента, потому что вы отправляете обратно неверные данные.
Даже если в том, что вы пытались сделать, не было этих ошибок, вы, похоже, не пытаетесь отправить обратно действительный http-ответ.