python - 为什么我的烧瓶服务器不会绑定我的 IP 地址?
问题描述
我尝试从 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 上的另一个系统访问您的应用程序LAN_IP:PORT
现在,大多数 ISP 不提供静态 IP,您不能在 Internet 上公开您的 WAN IP。但是,当您在 VPS 上运行应用程序时,0.0.0.0
您可以直接使用服务器的 WAN IP 并进行连接。
127.0.0.1
供您参考,和之间的区别0.0.0.0
可以在这里找到
推荐阅读
- python - 定义一个大小为 1 的字节对象
- r - 我将如何将 nrow() 用于多个条件?
- python - 计算 2D Numpy 数组的逐行移动平均值时处理 np.NaN
- ruby-on-rails - Capybara/Rspec - 使用 Ajax 请求在第二种情况下会话丢失
- python - 在 Python3 中从命令行和配置文件参数映射来自字典的变量
- c++ - 临时对象的堆栈空间是否被重用?
- azure - 使用 PowerShell 为 Azure 认知搜索配置 IP 防火墙
- javascript - 通过我的 javascript 应用程序将日志发送到新的遗物
- java - android问题上的Opengl es与投影矩阵上的对象opsition
- php - 无法通过 Mercury SMTP 服务器从 PHP 发送电子邮件:553 我们不中继非本地邮件,抱歉