#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 网络连接测试脚本 帮助诊断手机/平板连接问题 """ import socket import subprocess import sys import threading import time from http.server import HTTPServer, SimpleHTTPRequestHandler def get_local_ip(): """获取本机IP地址""" try: # 方法1: 连接到远程地址获取本地IP s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) ip = s.getsockname()[0] s.close() return ip except: try: # 方法2: 获取主机名对应的IP hostname = socket.gethostname() ip = socket.gethostbyname(hostname) if ip.startswith("127."): return None return ip except: return None def test_port(host, port): """测试端口是否可访问""" try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(5) result = sock.connect_ex((host, port)) sock.close() return result == 0 except: return False def start_test_server(port=8888): """启动测试HTTP服务器""" class TestHandler(SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-type', 'text/html; charset=utf-8') self.end_headers() html = """
如果您能看到这个页面,说明网络连接正常。
测试时间: %s
您的IP: %s
""" % (time.strftime('%Y-%m-%d %H:%M:%S'), self.client_address[0]) self.wfile.write(html.encode('utf-8')) def log_message(self, format, *args): print(f"📱 测试访问: {self.client_address[0]} - {format % args}") try: server = HTTPServer(('0.0.0.0', port), TestHandler) print(f"🧪 测试服务器已启动,端口: {port}") server.serve_forever() except Exception as e: print(f"❌ 测试服务器启动失败: {e}") def main(): print("=" * 60) print("🔍 网络连接诊断工具") print("=" * 60) print() # 1. 获取IP地址 print("📍 1. 获取网络IP地址...") local_ip = get_local_ip() if local_ip: print(f"✅ 本机IP地址: {local_ip}") else: print("❌ 无法获取IP地址,请检查网络连接") return # 2. 检查常用端口 print("\n🔌 2. 检查端口状态...") ports_to_test = [5000, 8080, 8888] for port in ports_to_test: if test_port('127.0.0.1', port): print(f"⚠️ 端口 {port} 已被占用") else: print(f"✅ 端口 {port} 可用") # 3. 显示连接信息 print(f"\n📱 3. 移动设备连接信息:") print(f" 主服务器地址: http://{local_ip}:5000") print(f" 手机客户端: http://{local_ip}:5000/mobile/mobile_client.html") print(f" 测试地址: http://{local_ip}:8888") # 4. 防火墙检查提示 print(f"\n🛡️ 4. 防火墙设置提示:") print(" 如果平板无法连接,请检查Windows防火墙设置:") print(" 1. 打开 Windows 安全中心") print(" 2. 点击 防火墙和网络保护") print(" 3. 点击 允许应用通过防火墙") print(" 4. 确保 Python 程序被允许通过防火墙") print(" 或者临时关闭防火墙进行测试") # 5. 网络检查命令 print(f"\n🔧 5. 网络检查命令:") print(f" 在平板上ping测试: ping {local_ip}") print(f" 在电脑上查看网络: ipconfig") print(f" 检查防火墙状态: netsh advfirewall show allprofiles") # 6. 启动测试服务器 print(f"\n🧪 6. 启动网络测试服务器...") print(f" 请在平板浏览器访问: http://{local_ip}:8888") print(" 如果能看到测试页面,说明网络连接正常") print(" 按 Ctrl+C 停止测试") print() try: start_test_server(8888) except KeyboardInterrupt: print("\n👋 测试结束") if __name__ == "__main__": main()