phthon开启服务127和ip无法访问

这是我师兄写的一段python代码,用来给文件共享的,但是在控制台使用python跑起来后控制台打印的内容是这样的[::],用ip地址和127都无法访问,只有localhost可以,在控制台查看端口占用情况也是这样的[::]地址(按理说应该是0.0.0.0,我在树莓派上跑就是正常的)

img

img

img

引用gpt回答
根据你的描述,这很有可能是由于Python代码在绑定IP地址时使用了"::"(即IPv6的localhost地址),而不是"0.0.0.0"(即IPv4的localhost地址)导致的。
在Python中,可以使用socket模块绑定IP地址。可能的代码如下:

import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("::", 8000))  # 使用"::"绑定IPv6地址

但是,某些系统在使用IPv6地址时可能会遇到问题,如果改为使用"0.0.0.0"绑定IPv4地址,就可以正常工作:

s.bind(("0.0.0.0", 8000))  # 使用"0.0.0.0"绑定IPv4地址

所以,我的解决建议是:

  1. 检查你的代码中是否使用了"::"绑定IP地址;
  2. 如果是,将其改为使用"0.0.0.0"绑定IPv4地址;
  3. 重新运行代码,问题很有可能就解决了。
    除此之外,也有其他可能的原因,比如:
  4. 防火墙阻挡了端口访问;
  5. 代码中有其他的bug;
  6. 系统环境变量设置导致的问题;
    等等。但根据你的描述,我认为使用IPv6地址导致的问题的可能性较大

你服务端有问题,应该放服务端的代码,放测试用的客户端代码干什么

绑定地址有问题,你执行start.py 带上参数试试。
python start.py 0.0.0.0 8099

写个测试类,浏览器测试输入127网址访问8089,看看能否输出hello,如果可以说明本地访问没问题的,检查下防火墙

import socket

HOST = '0.0.0.0'  # 绑定到所有网络接口
PORT = 8089       # 监听端口

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()

    while True:
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            conn.sendall(b'Hello, world!')

感觉你师兄的代码有问题,我加了一个可跨域的标头

# Python 3
from http.server import HTTPServer, SimpleHTTPRequestHandler
import sys

def test(*args):
    HTTPServer.allow_reuse_address = True
    port = int(sys.argv[1]) if len(sys.argv) > 1 else 8099
    test_orig = getattr(HTTPServer, "test", None)
    if callable(test_orig):
        test_orig(*args, port=port)

if __name__ == "__main__":
    test(CORSRequestHandler, HTTPServer)

class CORSRequestHandler(SimpleHTTPRequestHandler):
    def end_headers(self):
        self.send_header("Access-Control-Allow-Origin", "*")
        SimpleHTTPRequestHandler.end_headers(self)


这种情况通常发生在IPv6环境下。[::]表示所有IPv6地址,相当于0.0.0.0在IPv4环境下的作用。因此,您需要检查一下您的操作系统是否开启了IPv6支持。如果是,请尝试使用IPv6地址或关闭IPv6支持。

另外,如果您的局域网中存在其他设备,您也可以尝试使用局域网内其他设备的IP地址来访问该服务,以确定是否是IP地址的问题。

如果没有其他设备可以访问该服务,您还可以尝试更改监听地址,将[::]替换为指定的IP地址,例如127.0.0.1或您设备的IP地址。

很可能是代码中绑定的IP地址有问题,建议检查一下代码中绑定IP地址的部分,确保正确绑定了本机IP地址。另外,也可以尝试在代码中将绑定IP地址的部分改为0.0.0.0,这样可以监听所有的IP地址。最后,还需要确保本机的防火墙已经开放了对应的端口。

  • 以下回答由chatgpt基于相关博客总结生成:

    由参考资料中提供的代码,无法直接解决Python文件共享服务无法通过IP和本地回环地址访问的问题。

    针对该问题,可以考虑使用Python搭建Web服务器或使用现成的Python Web框架搭建Web应用程序。以下是具体的解决方案:

    1.使用Python搭建Web服务器

    使用Python提供的内置模块http.server,可以快速搭建一个简单的Web服务器,提供文件共享服务。具体步骤如下:

    (1)打开命令行窗口,使用cd命令进入需要共享文件的目录;

    (2)输入以下命令启动Web服务器:

    python -m http.server [port]
    

    其中,[port]为指定的端口号,默认为8000,可以根据需要修改。

    (3)在浏览器中输入http://localhost:[port],即可访问共享文件。如果需要从其他计算机访问,可以使用该计算机的IP地址代替localhost。

    2.使用现成的Python Web框架搭建Web应用程序

    现成的Python Web框架包括Flask、Django等,这里以Flask为例介绍如何搭建文件共享服务。具体步骤如下:

    (1)安装Flask框架:

    pip install Flask
    

    (2)创建文件共享服务的Python脚本,代码如下:

    from flask import Flask, send_file
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return 'Welcome to file sharing service!'
    
    @app.route('/download/<filename>')
    def download(filename):
        return send_file(filename)
    
    if __name__ == '__main__':
        app.run()
    

    其中,/download/表示下载文件时需要指定文件名,可以根据需要修改路径或URL。

    (3)在该脚本所在的目录下创建需要共享的文件,确保文件名与代码中的filename对应。例如,如果代码中写的是/download/abc.txt,则该目录下应该有一个名为abc.txt的文件。

    (4)启动Flask应用程序:

    python <filename>.py
    

    其中,为文件共享服务的Python脚本名。

    (5)在浏览器中输入http://localhost:5000/download/,即可下载共享文件。如果需要从其他计算机访问,可以使用该计算机的IP地址代替localhost。

    注:以上代码仅供参考,具体的实现方式可能需要根据具体需求进行修改。另外,使用Python提供的内置模块或现成的Python Web框架搭建Web服务时,需要注意网络安全问题,避免泄露敏感信息。

看起来就是绑定地址那里的问题,直接改一下就好了。你需要用哪个就直接写死即可。

django服务启动,127.0.0.1可以访问,但输入本机ip无法访问,解决办法 转载

(请看看您的django服务是不是还是默认的http://127.0.0.1:8000/,需要修改这个)

我们先到Django项目中找到setting文件

ALLOWED_HOSTS = [] ,修改为 ALLOWED_HOSTS = ['*']
1
在终端中Terminal启动django服务时,输入命令行

python manage.py runserver 0.0.0.0:8000


1、端口可以随意配置(只要没有占用即可)
2、显示0.0.0.0说明在setting.py文件中 ALLOWED_HOSTS = [’*’]中配置所有IP都可以访问该接口

检查下防火墙入站端口是否有问题,还有就是hosts文件是否被修过,检查下其中的localhost 和127.0.0.1是否被修改错误。其次检查下,是不是你的iis绑定的是ipv6,如果是的话,你现在通过ipv4访问肯定是不行的,如果是这样的话,重新绑定下:
netsh http add iplisten ipaddress=127.0.0.1

关闭防火墙试试