繁体   English   中英

为什么我的 Flask 服务器不会绑定我的 IP 地址?

[英]Why won't my flask server bind my ip address?

我尝试从 localhost、0.0.0.0 和我的 ipv4 地址运行。 当我使用 localhost 时,我无法从另一台计算机访问我的服务器。 当我使用 0.0.0.0 时,我遇到了同样的问题,当我使用我的公共 ipv4 地址时,它抛出了一个错误。

我的代码:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
        return "Hello World!"

if __name__ == "__main__":
    app.run(host="[my ip address]")

我的错误:

 * Serving Flask app "hello" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "hello.py", line 14, in <module>
    app.run(host="[my ip address]")
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/flask/app.py", line 990, in run
    run_simple(host, port, self, **options)
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 1052, in run_simple
    inner()
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 1005, in inner
    fd=fd,
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 848, in make_server
    host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 740, in __init__
    HTTPServer.__init__(self, server_address, handler)
  File "/usr/lib/python3.6/socketserver.py", line 456, in __init__
    self.server_bind()
  File "/usr/lib/python3.6/http/server.py", line 136, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/lib/python3.6/socketserver.py", line 470, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 99] Cannot assign requested address

为了找到我的 IP 地址,我使用了 bash 命令curl ifconfig.me

我的操作系统:

NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"

这是 Ubuntu 的问题,还是我的代码的问题?

解决此问题的最佳方法是拥有以下内容:

app.run(host='0.0.0.0', port='8000')可以根据方便更改端口。

当您使用不带任何参数的app.run ,它默认托管为 127.0.0.1,它绑定到您的本地系统。 在此状态下,您的应用程序无法通过 LAN 或 WAN(公共地址)通过任何其他系统连接

当您使用 0.0.0.0 运行它时,它可以通过 LAN 和 WAN 访问。 要在 Ubuntu 中获取您的 LAN 地址,您可以简单地运行hostname -I并且对于如前所述的 WAN 地址,您可以使用curl ifconfig.me 因此,您可以使用LAN_IP:PORT从同一 LAN 上的另一个系统访问您的应用程序

现在,大多数 ISP 不提供静态 IP,您无法在 Internet 上公开您的 WAN IP。 但是,当您在 VPS 上使用0.0.0.0运行应用程序时,您可以直接使用服务器的 WAN IP 并进行连接。

127.0.0.10.0.0.0之间的区别可以在这里找到,供您参考

“curl ifconfig.me”为您提供您的公共 IP 地址。 有时它被分配给路由器,在某些情况下 LAN 使用 NAT。 这意味着您的计算机可以有一个私有 IP 地址。 您是否使用命令 ifconfig 验证了接口上分配的地址?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM