rustdx-complete 1.0.0

功能完整的 A 股数据获取库,支持数据验证、技术指标、智能缓存、交易日历
# 连接问题快速排查

## ⚠️ 常见误解

**错误理解**:
```
❌ "需要在本地运行通达信服务(端口 2222)"
❌ "rustdx-complete 依赖本地 TCP 服务"
```

**正确理解**:
```
✅ rustdx-complete 连接远程通达信服务器
✅ 默认服务器: 115.238.56.198:7709
✅ 不需要本地任何服务
```

---

## 🔍 快速诊断

### 1分钟快速检查

```bash
# 检查网络连接
ping 115.238.56.198

# 测试 TCP 连接
nc -zv 115.238.56.198 7709

# 运行自动诊断
./scripts/diagnose_network.sh
```

---

## 💡 常见错误和解决方案

### 错误 1: "Connection refused"

**完整错误信息**:
```
Error: Connection refused (os error 111)
或
通达信服务未运行 - nc -zv 127.0.0.1 2222 返回 "Connection refused"
```

**原因**: 你在测试本地端口 2222,但 rustdx-connect 不使用本地端口!

**解决方案**:
```rust
// ❌ 错误:不需要本地服务
// let tcp = Tcp::connect_to_local_2222()?;

// ✅ 正确:直接连接远程服务器
let mut tcp = Tcp::new()?;  // 自动连接到 115.238.56.198:7709
```

---

### 错误 2: "TimedOut"

**完整错误信息**:
```
Error: TimedOut
或
Error: Connection timed out
```

**原因**: 网络问题或防火墙阻止

**解决方案**:
```rust
use rustdx_complete::tcp::ip::STOCK_IP;

// 尝试多个服务器
for addr in STOCK_IP.iter().take(5) {
    match Tcp::new_with_ip(addr) {
        Ok(mut tcp) => {
            println!("✅ 连接成功: {}", addr);
            // 使用这个连接
            break;
        }
        Err(e) => {
            println!("⚠️  {} 失败: {}", addr, e);
        }
    }
}
```

或者运行诊断脚本:
```bash
./scripts/diagnose_network.sh
```

---

### 错误 3: "No route to host"

**完整错误信息**:
```
Error: No route to host (os error 113)
```

**原因**: 网络不可达或被防火墙阻止

**解决方案**:
1. 检查网络连接
2. 检查防火墙设置
3. 如果在公司网络,联系网络管理员
4. 尝试使用 VPN 或代理

---

### 错误 4: "Permission denied"

**完整错误信息**:
```
Error: Permission denied (os error 13)
```

**原因**: 防火墙阻止出站连接

**解决方案**:
```bash
# Ubuntu/Debian (ufw)
sudo ufw allow out 7709/tcp

# CentOS/RHEL (firewalld)
sudo firewall-cmd --add-port=7709/tcp --permanent
sudo firewall-cmd --reload

# 或者临时禁用防火墙测试(不推荐)
sudo ufw disable
```

---

## 🧪 测试连接

### 方法 1: 使用示例程序

```bash
cargo run --example test_connection
```

预期输出:
```
🚀 rustdx-complete 连接测试

方法1: 使用默认连接
连接到默认服务器: 115.238.56.198:7709

✅ 连接成功!

📊 股票行情:
  000001 平安银行: 11.45元 (+0.00%)

✅ 数据获取成功!
```

### 方法 2: 使用 cargo test

```bash
cargo test check_all_stock_ips -- --nocapture
```

预期输出:
```
✅ 检测到 15 个可用服务器 (总共 19 个):
  - 115.238.56.198:7709
  - 114.80.149.19:7709
  - 114.80.149.22:7709
  ...
```

### 方法 3: 简单代码测试

创建 `test.rs`:
```rust
use rustdx_complete::tcp::{Tcp, Tdx};
use rustdx_complete::tcp::stock::SecurityQuotes;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    println!("连接到通达信服务器...");

    match Tcp::new() {
        Ok(mut tcp) => {
            println!("✅ 连接成功!");

            let mut quotes = SecurityQuotes::new(vec![(0, "000001")]);
            quotes.recv_parsed(&mut tcp)?;

            for quote in quotes.result() {
                println!("股票: {} 价格: {}", quote.code, quote.price);
            }

            Ok(())
        }
        Err(e) => {
            println!("❌ 连接失败: {}", e);
            Err(e.into())
        }
    }
}
```

运行:
```bash
cargo run --example test
```

---

## 📋 检查清单

在使用 rustdx-complete 前,请确认:

- [ ] 有互联网连接
- [ ] 防火墙允许 TCP 出站连接(端口 7709)
- [ ] 不在公司网络限制中
- [ ] 未设置阻止连接的代理
- [ ] rustdx-complete 版本 >= 0.6.6

---

## 🆘 仍然无法连接?

### 收集诊断信息

```bash
# 1. 运行诊断脚本
./scripts/diagnose_network.sh > diagnose_output.txt 2>&1

# 2. 测试网络连接
ping -c 5 115.238.56.198 > ping_output.txt 2>&1

# 3. 测试 TCP 连接
nc -zv 115.238.56.198 7709 > nc_output.txt 2>&1

# 4. 运行 Rust 测试
cargo test check_all_stock_ips -- --nocapture > rust_test.txt 2>&1
```

### 提交 Issue

将以上诊断信息提交到:
[https://github.com/jackluo2012/rustdx/issues](https://github.com/jackluo2012/rustdx/issues)

---

## 📚 相关文档

- [网络连接完整指南]NETWORK_CONNECTION_GUIDE.md
- [项目 README]README.md
- [示例程序]examples/

---

**记住**: rustdx-connect 是连接到**远程服务器**,不需要本地服务!