在树莓派上使用python的Web服务器,无法通过LAN或Internet访问

问题描述 投票:0回答:1

因此,我必须编写一个运行在Raspberry Pi上的简单Web服务器,使用套接字和python,并显示“收到请求!”服务器收到请求时,将其转到RPi的屏幕。

要尝试此操作,我将RPi的IP地址(192.168.8.4)输入到浏览器的地址栏中,从a)同一局域网(192.168.8.33)中的一台笔记本电脑b)其他局域网中的笔记本电脑,例如使用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)或从Internet访问Web服务器时,我无法。

enter image description here

所以,我被困在这里,我还必须做什么?-从同一网络连接-从Internet连接

*我在华为家用路由器中启用了“虚拟服务器”,以将端口80转发到我的RPi IP,如下所示:广域网端口:80IP局域网:192.168.8.4(RPi地址)局域网端口:80协议:TCP状态:有效

python networking raspberry-pi webserver
1个回答
0
投票

原因已打印出来。它说127.0.0.1 80是唯一可访问的地方。代替my_socket.bind((HOST, PORT)),而是执行my_socket.bind(("0.0.0.0", "80"))。那应该解决它。

© www.soinside.com 2019 - 2024. All rights reserved.