【发布时间】:2020-04-26 18:27:01
【问题描述】:
所以,我必须编写一个在 Raspberry Pi 上运行的简单 Web 服务器,使用 socket 和 python,打印“Got a request!”当服务器收到请求时,转到 RPi 的屏幕。
为此,我将在浏览器的地址行中输入 RPi 的 IP 地址(192.168.8.4),从 a) 同一 LAN (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 成功测试了我的服务器,同时充当客户端,见下图:
但是,当我尝试从笔记本电脑 (192.168.8.33) 或 Internet 访问网络服务器时,我无法访问。
那么,我被困在这里了,我还需要做什么? - 从同一网络连接 - 从互联网连接
*我在我的华为家用路由器中启用了“虚拟服务器”,将80端口转发到我的RPi IP,如下: 广域网端口:80 IP LAN:192.168.8.4(RPi 地址) 端口局域网:80 协议:TCP 状态:活跃
【问题讨论】:
标签: python networking raspberry-pi webserver