Веб-сервер, использующий python на Raspberry Pi, недоступный из локальной сети или Интернета - PullRequest
0 голосов
/ 26 апреля 2020

Итак, мне нужно написать простой веб-сервер, работающий на Raspberry Pi с использованием сокета и python, с надписью «Получил запрос!» на экран RPi, когда сервер получает запрос.

Чтобы попробовать это, я введу IP-адрес RPi (192.168.8.4) в адресную строку браузера с: а) ноутбука в та же ЛВС (192.168.8.33) б) ноутбук в другой ЛВС, например мобильный телефон, использующий 4G

Вот мой код:

import socket
import sys

# --- 1 Create socket ---
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket_info = socket.getaddrinfo(None, 80)  #Listening for any address
HOST, PORT = my_socket_info[3][4]
print(HOST, PORT)  #IP and port
#print(my_socket_info)

# --- 2 Bind socket ---
try:
    my_socket.bind((HOST, PORT))
except socket.error:
    print("Failed to bind")
    sys.exit()

# --- 3 Listen for a connection ---
my_socket.listen(5)

# --- 4 Accept connection ---
while True:
    client_connection, client_address = my_socket.accept()
    # --- 5 Receive data ---
    data = client_connection.recv(1024)
    if not data:
        break
    print ("Got a request!")
    print (data)

    # --- 6 Send response ---
    http_response = b"\HTTP/1.1 200 OK "
    client_connection.sendall(http_response)

client_connection.close()
my_socket.close()

Итак, я успешно протестировал мой сервер, запустив netcat на малине, выступая также в качестве клиента, см. рисунок ниже:

Testing web server using netcat

НО, когда я пытаюсь связаться с веб-сервером со своего ноутбука (192.168.8.33) или с Inte rnet я просто не могу.

enter image description here

Итак, я Я застрял здесь, что еще я должен сделать? -подключиться из той же сети -подключиться с Inte rnet

* Я включил "виртуальный сервер" в домашнем маршрутизаторе Huawei для переадресации порта 80 на мой IP-адрес RPi следующим образом: Порт WAN: 80 IP LAN: 192.168.8.4 (адрес RPi) Порт LAN: 80 Протокол: TCP Состояние: активно

1 Ответ

2 голосов
/ 26 апреля 2020

Причина распечатана. Там написано 127.0.0.1 80, что является единственным доступным местом. Вместо my_socket.bind((HOST, PORT)) делай my_socket.bind(("0.0.0.0", "80")). Это должно исправить это.

...