我有一个覆盆子pi 3,我做了一个烧瓶网络服务器,现在我运行一个网站。问题是我只能在我的pi上获得这个网站。我可以通过在浏览器中键入127.0.0.1:5000来访问我的pi页面。
如果我在Windows笔记本电脑或Android平板电脑上的浏览器中输入的引号为"my_raspbery_pi_ip :5000"
,我就会
找不到页面my_raspbery_pi_ip是192.168.0.17
pi@piros:~ $ netstat --tcp --listening --programs --numeric
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
PID/Program name
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN 2322/python
tcp 0 0 127.0.0.1:3350 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:3389 0.0.0.0:* LISTEN -
tcp6 0 0 :::80 :::* LISTEN -
tcp6 0 0 :::21 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -
tcp6 0 0 ::1:631 :::* LISTEN -
可能是什么问题?
由于
修改
from flask import Flask
from time import strftime, sleep, localtime
from flask import render_template
import os
app = Flask(__name__)
@app.route("/")
def hello():
return render_template('home.html')
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=True)
答案 0 :(得分:0)
要让其他设备能够访问您的pi上的Web服务器,您必须:
1 /让网络服务器运行在< 0.0.0.0:5000'所以它会监听所有的ips
2 /将您的pi配置为接受来自本地网络的传入请求(在端口5000上)
3 /确保您的其他设备已连接到本地网络
4 /来自您其他设备的浏览器(或任何网络客户端)在your_pi_ip上发送GET请求:5000注意:我在这里提到了端口5000,因为它似乎是烧瓶服务器使用的默认端口,但任何空闲端口都可以。
NB2:当然,这仍然只能让您的网站从本地网络访问...对于公共访问,您需要一个易于访问的服务器。
答案 1 :(得分:0)
您能否提供一个代码片段,您的Web服务器会在哪里监听/公开自己?
此处似乎您的服务器正在侦听127.0.0.1。 这是环回地址,这意味着它只接收机器本地请求。
您可以使用0.0.0.0收听所有地址。
为此,您应该拥有以下内容:
import org.apache.nifi.processor.FlowFileFilter;
import groovy.json.JsonSlurper
import groovy.json.JsonBuilder
//get first flow file
def ff0 = session.get()
if(!ff0)return
def filename = ff0.getAttribute('filename')
//try to find files with same attribute in the incoming queue
def ffList = session.get(new FlowFileFilter(){
public FlowFileFilterResult filter(FlowFile ff) {
if( filename == ff.getAttribute('filename') )return FlowFileFilterResult.ACCEPT_AND_CONTINUE
return FlowFileFilterResult.REJECT_AND_CONTINUE
}
})
//let's assume you require two additional files in queue with the same attribute
if( !ffList || ffList.size()<1 ){
session.rollback(true)
return
}
//let's put all in one list to simplify later iterations
ffList.add(ff0)
if( ffList.size()>2 ){
session.transfer(ffList, REL_FAILURE)
return
}
//create empty map (aka json object)
def json = [:]
//iterate through files parse and merge attributes
ffList.each{ff->
session.read(ff).withStream{rawIn->
def fjson = new JsonSlurper().parse(rawIn)
json.putAll(fjson)
}
}
//create new flow file and write merged json as a content
def ffOut = session.create()
ffOut = session.write(ffOut,{rawOut->
rawOut.withWriter("UTF-8"){writer->
new JsonBuilder(json).writeTo(writer)
}
} as OutputStreamCallback )
//set mime-type
ffOut = session.putAttribute(ffOut, "mime.type", "application/json")
session.remove(ffList)
session.transfer(ffOut, REL_SUCCESS)