Python Socket Programming Простой веб-сервер, пытающийся получить доступ к html-файлу с сервера - PullRequest
1 голос
/ 29 апреля 2019

Итак, я пытаюсь создать простой сервер на python и пытаюсь получить доступ к html-файлу в том же каталоге через него, но в качестве вывода я продолжаю готовиться к работе ... output

РЕДАКТИРОВАТЬ: Поместите файл HTML (например, HelloWorld.html) в тот же каталог, в котором находится сервер. Запустите программу сервера.Определите IP-адрес хоста, на котором работает сервер (например, 128.238.251.26).С другого хоста откройте браузер и предоставьте соответствующий URL.Например: http://128.238.251.26:6789/HelloWorld.html «HelloWorld.html» - это имя файла, который вы поместили в каталог сервера.Обратите внимание также на использование номера порта после двоеточия.Вам нужно заменить этот номер порта тем портом, который вы использовали в коде сервера.В приведенном выше примере мы использовали номер порта 6789. Затем браузер должен отобразить содержимое HelloWorld.html.Если вы опустите ": 6789", браузер примет порт 80, и вы получите веб-страницу с сервера только в том случае, если ваш сервер прослушивает порт 80. Затем попробуйте получить файл, которого нет на сервере.Вы должны получить сообщение «404 Not Found».

#import socket module
from socket import *
serverSocket = socket(AF_INET, SOCK_STREAM)
#Prepare a sever socket
serverSocket.bind(('', 12006))
serverSocket.listen(1)
while True:
    print 'Ready to serve...'
    #Establish the connection
    connectionSocket, addr = serverSocket.accept()
    try:
        message = connectionSocket.recv(1024)
        filename = message.split()[1]
        f = open(filename[1:])
        outputdata = f.read()
        f.close()
        #Send one HTTP header line into socket
        connectionSocket.send('HTTP/1.0 200 OK\r\n\r\n')
        #Send the content of the requested file to the client
        for i in range(0, len(outputdata)):
            connectionSocket.send(outputdata[i])
        connectionSocket.close()
    except IOError:
        #Send response message for file not found
        connectionSocket.send('404 Not Found')
        #Close client socket
        connectionSocket.close()
serverSocket.close() 

1 Ответ

0 голосов
/ 29 апреля 2019

Ваш вывод является стандартным выходом , который используется через функцию print. Вы должны сделать запрос на ваш сервер, и вы получите правильный вывод

Если ваш сервер на вашем локальном компьютере, вы должны использовать localhost адрес; если нет, вы должны использовать ваш сервер IP. Также вам следует указать порт. 12006 в вашем случае. localhost:12006 в качестве примера

Также socket.send метод требует байтовоподобный объект. не строка

Если это только строка литерал , вам следует добавить символ b перед первой кавычкой

Пример:

connectionSocket.send(b'HTTP/1.0 200 OK\r\n\r\n')

Если это string объект, вы должны кодировать it:

connectionSocket.send(outputdata[i].encode())

Ознакомьтесь с документацией

...