#!/usr/bin/env python3 """ 测试 Binance WebSocket 连接 """ import time import sys def test_websocket(): print("=" * 50) print("Binance WebSocket 连接测试") print("=" * 50) # 1. 测试基本网络连接 print("\n1. 测试网络连接...") try: import socket socket.setdefaulttimeout(10) socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(("stream.binance.com", 443)) print(" ✅ 可以连接到 stream.binance.com:443") except Exception as e: print(f" ❌ 无法连接到 Binance 服务器: {e}") print(" 提示: 可能需要使用代理或 VPN") return False # 2. 测试 REST API print("\n2. 测试 REST API...") try: import requests resp = requests.get("https://api.binance.com/api/v3/ping", timeout=10) if resp.status_code == 200: print(" ✅ REST API 正常") else: print(f" ❌ REST API 返回状态码: {resp.status_code}") except Exception as e: print(f" ❌ REST API 请求失败: {e}") # 3. 测试 WebSocket 连接 print("\n3. 测试 WebSocket 连接...") try: from binance import ThreadedWebsocketManager received_data = [] def handle_message(msg): if msg.get('e') == 'error': print(f" ❌ WebSocket 错误: {msg}") else: symbol = msg.get('s', 'unknown') price = msg.get('c', 'unknown') received_data.append(msg) print(f" 📊 收到数据: {symbol} = ${price}") print(" 正在启动 WebSocket...") twm = ThreadedWebsocketManager() twm.start() # 等待启动 time.sleep(2) print(" 正在订阅 BTCUSDT...") twm.start_symbol_ticker_socket(callback=handle_message, symbol="BTCUSDT") # 等待数据 print(" 等待数据 (10秒)...") for i in range(10): time.sleep(1) if received_data: print(f"\n ✅ WebSocket 连接正常!已收到 {len(received_data)} 条数据") twm.stop() return True print(" ❌ 10秒内未收到任何数据") twm.stop() return False except Exception as e: print(f" ❌ WebSocket 测试失败: {e}") import traceback traceback.print_exc() return False if __name__ == "__main__": success = test_websocket() print("\n" + "=" * 50) if success: print("结论: WebSocket 连接正常") else: print("结论: WebSocket 连接有问题") print("\n可能的解决方案:") print("1. 检查网络连接") print("2. 使用代理/VPN (某些地区无法直接访问 Binance)") print("3. 检查防火墙设置") print("=" * 50)