首页 > 解决方案 > 在树莓派上使用 python 的 Web 服务器,无法从 LAN 或 Internet 访问

问题描述

所以,我必须编写一个在 Raspberry Pi 上运行的简单 Web 服务器,使用 socket 和 python,打印“Got a request!”。当服务器收到请求时,显示在 RPi 的屏幕上。

为此,我将在浏览器的地址行中输入 RPi 的 IP 地址 (192.168.8.4),来自 a) 同一 LAN (192.168.8.33) 中的笔记本电脑 b) 不同 LAN 中的笔记本电脑,例如以使用 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 成功地测试了我的服务器,也作为客户端,见下图:

使用 netcat 测试 Web 服务器

但是,当我尝试从笔记本电脑 (192.168.8.33) 或 Internet 访问 Web 服务器时,我就是做不到。

在此处输入图像描述

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

*我在我的华为家用路由器中启用了“虚拟服务器”,将端口80转发到我的RPi IP,如下:端口WAN:80 IP LAN:192.168.8.4(RPi地址)端口LAN:80协议:TCP状态:活动

标签: pythonnetworkingraspberry-piwebserver

解决方案


原因打印出来了。它说127.0.0.1 80这是唯一可以到达的地方。而不是my_socket.bind((HOST, PORT))my_socket.bind(("0.0.0.0", "80"))。那应该解决它。


推荐阅读