无法从其他地方获取烧瓶网站

时间:2017-09-07 10:25:16

标签: python raspberry-pi

我有一个覆盆子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)

2 个答案:

答案 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)