67
votes

I'm trying to run a simple web server on a Raspberry Pi with Flask. When I run my Flask app, it says:

running on http://127.0.0.1:5000/

But when I enter this address on my laptop's in Chrome, I get

ERR_CONNECTION_REFUSED

I can open 127.0.0.1:5000 on the Raspberry Pi's browser. What do I need to do to connect from another computer?

7
127.0.0.1 is the localhost address and will only be reachable from the raspi. In order to get access from your laptop open up the terminal on your raspi and try instead the ip from ifconfig should look something like 192.168.0.XX:5000. This assumes that they are both on the same local network.jmunsch
@jm_____ ifconfig returned 192.168.1.103, I tried it with :5000 but still get connection refused. and yes they are both on the same networkYashar

7 Answers

163
votes

Run your app like this:

if __name__ == '__main__':
    app.run(host='0.0.0.0')

It will make the server externally visible. If the IP address of the machine is 192.168.X.X then, from the same network you can access it in 5000 port. Like, http://192.168.X.X:5000

12
votes

when you are running the server via flask run change it to flask run --host=0.0.0.0 to connect, find the IPV4 address of the server that your script is running on. On the same network, go to http://[IPV4 address]:5000

11
votes

A reason could also be in firewall refusing incoming connections on port 5000. Try:

sudo ufw allow 5000
6
votes
app.run(host='0.0.0.0',port=5000)

if you run your app in this way then your server will be visible externally. Steps by Setp:

  1. Run your app by using the following command

    app.run(host='0.0.0.0',port=5000)

  2. Go to the window cmd . Type ipconfig and get the get the IPV4 adress suppose your IPV4 address is 192.168.X.X

  3. Go to the mobile browser and type the 192.168.X.X:5000

5
votes

If you have debug = True inside your app.run(), then it will not be visible to other machines either. Specify host and port inside app.run() without the debug = True.

2
votes

You will have to run the development server such that it listens to requests on all interfaces and not just the local one

Ask Flask to listen on 0.0.0.0:PORT_NUMBER

or any other port you may choose

0
votes
  • Both devices must be connected to same network.
  • Use app.run(host='0.0.0.0',port=5000) and run with your own Ipv4 address like his http://[Your Ipv4 address]:5000
  • If you are connecting this with android app then don't forget to put INTERNET permission in manifest file.