|
|
@@ -74,68 +74,85 @@ async fn main() { |
|
|
|
match db.get_table_data(table).await { |
|
|
|
Ok(rows) => { |
|
|
|
println!("成功获取 {} 条记录", rows.len()); |
|
|
|
// 将每行数据转换为JSON |
|
|
|
// 将每行数据转换为JSON并发送到服务器 |
|
|
|
for row in rows { |
|
|
|
let json_data = db::format_row_as_json(&row); |
|
|
|
println!("数据: {}", serde_json::to_string_pretty(&json_data).unwrap()); |
|
|
|
} |
|
|
|
} |
|
|
|
Err(e) => println!("获取表 {} 数据失败: {}", table.name, e), |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return; |
|
|
|
let mut retry_count = 0; |
|
|
|
let server_addr = format!("{}:{}", config.server.host, config.server.port); |
|
|
|
|
|
|
|
// TCP连接部分 |
|
|
|
while retry_count < config.client.max_retries { |
|
|
|
println!("\n尝试连接服务器 {} (第{}次)...", server_addr, retry_count + 1); |
|
|
|
|
|
|
|
match TcpStream::connect(&server_addr) { |
|
|
|
Ok(mut stream) => { |
|
|
|
println!("成功连接到服务器!"); |
|
|
|
|
|
|
|
stream.set_read_timeout(Some(Duration::from_secs(config.client.read_timeout_secs))).unwrap(); |
|
|
|
stream.set_write_timeout(Some(Duration::from_secs(config.client.write_timeout_secs))).unwrap(); |
|
|
|
|
|
|
|
let msg = "HelloOK"; |
|
|
|
match stream.write(msg.as_bytes()) { |
|
|
|
Ok(_) => println!("成功发送消息: {}", msg), |
|
|
|
Err(e) => println!("发送消息失败: {}", e), |
|
|
|
} |
|
|
|
|
|
|
|
let mut buffer = [0; 1]; |
|
|
|
match stream.read(&mut buffer) { |
|
|
|
Ok(n) => { |
|
|
|
if n == 1 { |
|
|
|
let bit = buffer[0]; |
|
|
|
if bit == 0 || bit == 1 { |
|
|
|
println!("接收到比特值: {}", bit); |
|
|
|
} else { |
|
|
|
println!("接收到非预期的值: {} (十六进制: {:02X})", bit, bit); |
|
|
|
let msg = serde_json::to_string(&json_data).unwrap(); |
|
|
|
|
|
|
|
// 创建TCP连接 |
|
|
|
let server_addr = format!("{}:{}", config.server.host, config.server.port); |
|
|
|
let mut retry_count = 0; |
|
|
|
|
|
|
|
while retry_count < config.client.max_retries { |
|
|
|
println!("\n尝试连接服务器 {} (第{}次)...", server_addr, retry_count + 1); |
|
|
|
|
|
|
|
match TcpStream::connect(&server_addr) { |
|
|
|
Ok(mut stream) => { |
|
|
|
println!("成功连接到服务器!"); |
|
|
|
|
|
|
|
if let Err(e) = stream.set_read_timeout(Some(Duration::from_secs(config.client.read_timeout_secs))) { |
|
|
|
println!("设置读取超时失败: {}", e); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
if let Err(e) = stream.set_write_timeout(Some(Duration::from_secs(config.client.write_timeout_secs))) { |
|
|
|
println!("设置写入超时失败: {}", e); |
|
|
|
continue; |
|
|
|
} |
|
|
|
|
|
|
|
// 发送数据 |
|
|
|
match stream.write_all(msg.as_bytes()) { |
|
|
|
Ok(_) => println!("成功发送消息: {}", msg), |
|
|
|
Err(e) => { |
|
|
|
println!("发送消息失败: {}", e); |
|
|
|
retry_count += 1; |
|
|
|
continue; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 读取响应 |
|
|
|
let mut buffer = [0; 1]; |
|
|
|
match stream.read_exact(&mut buffer) { |
|
|
|
Ok(_) => { |
|
|
|
let bit = buffer[0]; |
|
|
|
println!("接收到比特值: {}", bit); |
|
|
|
if(bit==255){ |
|
|
|
println!("接收成功"); |
|
|
|
break; |
|
|
|
} |
|
|
|
else if(bit==0){ |
|
|
|
println!("接收失败"); |
|
|
|
retry_count += 1; |
|
|
|
continue; |
|
|
|
} |
|
|
|
else{ |
|
|
|
println!("接收到非预期的值: {} (十六进制: {:02X})", bit, bit); |
|
|
|
retry_count += 1; |
|
|
|
} |
|
|
|
} |
|
|
|
Err(e) => { |
|
|
|
println!("接收数据失败: {}", e); |
|
|
|
retry_count += 1; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
Err(e) => { |
|
|
|
println!("连接服务器失败: {}", e); |
|
|
|
retry_count += 1; |
|
|
|
if retry_count < config.client.max_retries { |
|
|
|
println!("等待{}秒后重试...", config.client.retry_delay_secs); |
|
|
|
thread::sleep(Duration::from_secs(config.client.retry_delay_secs)); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
println!("未接收到数据"); |
|
|
|
} |
|
|
|
} |
|
|
|
Err(e) => println!("接收数据失败: {}", e), |
|
|
|
} |
|
|
|
break; |
|
|
|
} |
|
|
|
Err(e) => { |
|
|
|
println!("连接服务器失败: {}", e); |
|
|
|
retry_count += 1; |
|
|
|
if retry_count < config.client.max_retries { |
|
|
|
println!("等待{}秒后重试...", config.client.retry_delay_secs); |
|
|
|
thread::sleep(Duration::from_secs(config.client.retry_delay_secs)); |
|
|
|
|
|
|
|
if retry_count >= config.client.max_retries { |
|
|
|
println!("达到最大重试次数,跳过当前数据"); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
Err(e) => println!("获取表 {} 数据失败: {}", table.name, e), |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if retry_count >= config.client.max_retries { |
|
|
|
println!("达到最大重试次数,程序退出"); |
|
|
|
} |
|
|
|
} |