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

时间:2020-04-26 18:27:01

标签: python networking raspberry-pi webserver

因此,我必须使用套接字和python编写一个运行在Raspberry Pi上的简单Web服务器,并打印“收到请求!”服务器收到请求后,将其转到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,如下所示: 广域网端口:80 IP局域网:192.168.8.4(RPi地址) 局域网端口:80 协议:TCP 状态:有效

1 个答案:

答案 0 :(得分:2)

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