因此,我必须编写一个运行在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(也作为客户端,成功地测试了我的服务器,请参见下图:
但是,当我尝试从笔记本电脑(192.168.8.33)或从Internet访问Web服务器时,我无法。
所以,我被困在这里,我还必须做什么?-从同一网络连接-从Internet连接
*我在华为家用路由器中启用了“虚拟服务器”,以将端口80转发到我的RPi IP,如下所示:广域网端口:80IP局域网:192.168.8.4(RPi地址)局域网端口:80协议:TCP状态:有效
原因已打印出来。它说127.0.0.1 80
是唯一可访问的地方。代替my_socket.bind((HOST, PORT))
,而是执行my_socket.bind(("0.0.0.0", "80"))
。那应该解决它。