Простой TCP-сервер не может подключиться - PullRequest
0 голосов
/ 19 февраля 2020

Я знакомлюсь с сетевым курсом, и мы учимся программировать базовый c TCP-сервер.

Моя настройка: Назначение вызывает сервер, веб-сервер которого обрабатывает один HTTP-запрос за раз. Мой веб-сервер должен «принять и проанализировать HTTP-запрос, получить запрошенный файл из файловой системы сервера, создать ответное сообщение HTTP, состоящее из запрошенного файла, которому предшествуют строки заголовка, а затем отправить ответ непосредственно клиенту. Если запрошено файл отсутствует на сервере, сервер должен отправить клиенту сообщение HTTP «404 Not Found». " У меня есть сервер, закодированный в Python (см. Ниже), и, насколько я могу судить, код точен. В том же каталоге я также создал простой файл hello world html, поэтому у меня есть к чему обратиться.

Запуск моего сервера: Когда я запускаю код, терминал ожидал сообщения «готово к обслуживанию ...» и прослушивал соединение. Это правильно.

Затем, когда я набираю URL в своем браузере (я пробовал оба http://localhost: 1001 и http://localhost: 1001 / HelloWorld. html) браузер сообщает, что не может подключиться.

Невозможно подключить экран из браузера

Я почти уверен, что либо неправильно подключаюсь к серверу в качестве клиента, либо если мой windows компьютер не работает Неправильно настроен, но любой совет о том, как подключиться и получить мой запрос к серверу, будет принята с благодарностью.

#import socket module
from socket import *
import sys # In order to terminate the program

serverSocket = socket(AF_INET, SOCK_STREAM)

#Prepare a sever socket
serverPort = 1001
serverSocket.bind(('',serverPort))
serverSocket.listen(1)

while True:
    #Establish the connection
    print('Ready to serve...')
    connectionSocket, addr = serverSocket.accept()
    try:
        message = connectionSocket.recv(1024).decode()
        filename = message.split()[1]
        f = open(filename[1:])
        outputdata = f.read()
        #Send one HTTP header line into socket
        #Fill in start
        header = 'HTTP/1.1 200 OK\n'
        connectionSocket.send(header.encode())

        #Fill in end

        #Send the content of the requested file to the client
        for i in range(0, len(outputdata)):
            connectionSocket.send(outputdata[i].encode())

        connectionSocket.send("\r\n".encode())
        connectionSocket.close()
    except IOError:
        #Send response message for file not found (404)
        #Fill in start
        error = 'HTTP/1.1 404 Not Found'
        connectionSocket.send(error.encode())
        #Fill in end

        #Close client socket
        #Fill in start
        connectionSocket.close()
        #Fill in end

serverSocket.close()
sys.exit()  #Terminate the program after sending the corresponding data

1 Ответ

0 голосов
/ 19 февраля 2020

Я только что попытался запустить ваш сервер, и он работал правильно. Я попытался получить сам код python, используя URL-адрес "http://localhost: 1001 / test.py ", и получил ваш код.

Некоторые вещи, которые вы, возможно, захотите проверить: если у вас есть доступ к порту вашего сервера 1001. Поскольку это не стандартный порт, некоторые хосты могут заблокировать его. Вместо этого вы можете попробовать использовать порт 80.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...