跳到主要内容

UOTA TCP客户端示例

核心概念:文档中心 | UOTA TCP客户端示例 | 概览

本目录包含了UOTA TCP协议的C和C++客户端实现示例,用于演示如何接入UOTA TCP服务。


核心概念:文档中心 | UOTA TCP客户端示例 | 文件说明

文件说明

  • uota_tcp_client.c - C语言客户端实现
  • UotaTcpClient.cpp - C++客户端实现
  • Makefile - 编译配置文件
  • README.md - 使用说明文档

核心概念:文档中心 | UOTA TCP客户端示例 | 依赖库

依赖库


核心概念:文档中心 | UOTA TCP客户端示例 | Ubuntu/Debian系统

Ubuntu/Debian系统

sudo apt-get install libssl-dev libjson-c-dev libjsoncpp-dev

核心概念:文档中心 | UOTA TCP客户端示例 | CentOS/RHEL系统

CentOS/RHEL系统

sudo yum install openssl-devel json-c-devel jsoncpp-devel

核心概念:文档中心 | UOTA TCP客户端示例 | macOS系统

macOS系统

brew install openssl json-c jsoncpp

核心概念:文档中心 | UOTA TCP客户端示例 | 编译方法

编译方法


核心概念:文档中心 | UOTA TCP客户端示例 | 使用Makefile (推荐)

使用Makefile (推荐)

# 安装依赖库
make install

# 编译所有客户端
make all

# 或者单独编译
make c # 编译C语言客户端
make cpp # 编译C++客户端

核心概念:文档中心 | UOTA TCP客户端示例 | 手动编译

手动编译

# C语言客户端
gcc -o uota_client_c uota_tcp_client.c -lssl -lcrypto -ljson-c

# C++客户端
g++ -std=c++11 -o uota_client_cpp UotaTcpClient.cpp -lssl -lcrypto -ljsoncpp

核心概念:文档中心 | UOTA TCP客户端示例 | 运行方法

运行方法


核心概念:文档中心 | UOTA TCP客户端示例 | 使用默认服务器地址 (192.168.1.87:8520)

使用默认服务器地址 (192.168.1.87:8520)

# C语言客户端
./uota_client_c

# C++客户端
./uota_client_cpp

核心概念:文档中心 | UOTA TCP客户端示例 | 指定服务器地址

指定服务器地址

# C语言客户端
./uota_client_c <服务器IP> <端口>
./uota_client_c 192.168.1.87 8520

# C++客户端
./uota_client_cpp <服务器IP> <端口>
./uota_client_cpp 192.168.1.87 8520

核心概念:文档中心 | UOTA TCP客户端示例 | 使用Makefile运行

使用Makefile运行

# 运行C语言客户端
make run-c

# 运行C++客户端
make run-cpp

# 测试指定服务器
SERVER_IP=192.168.1.87 SERVER_PORT=8520 make test-c
SERVER_IP=192.168.1.87 SERVER_PORT=8520 make test-cpp

核心概念:文档中心 | UOTA TCP客户端示例 | 运行示例

运行示例


核心概念:文档中心 | UOTA TCP客户端示例 | 成功运行输出

成功运行输出

UOTA TCP Client (C version)
Connecting to 192.168.1.87:8520
Connected to server 192.168.1.87:8520
Waiting for timestamp response...
Received: {"type":"TIMESTAMP_RESPONSE","data":"1761104391386"}
Parsed timestamp: 1761104391386
Sending UOTA info request...
UOTA request sent successfully
Waiting for UOTA response...
Received response: {"type":"UOTA_INFO_RESPONSE","data":"brakWyt/yYe/pxjxgWRXh+..."}
Response type: UOTA_INFO_RESPONSE
Decrypted UOTA info: {"url":"http://192.168.1.87:8742/app-api/infra/file/download/redirect/1757560816080/app-netservice-3.4.9-allwinner-20250911-debug.apk","size":4747480,"packageName":"com.android.netservice","versionCode":49,"md5":"c7d614b68b94ef0ca470fb30fc3a79ec"}
Download URL: http://192.168.1.87:8742/app-api/infra/file/download/redirect/1757560816080/app-netservice-3.4.9-allwinner-20250911-debug.apk
File size: 4747480 bytes
MD5: c7d614b68b94ef0ca470fb30fc3a79ec
Version code: 49
Package name: com.android.netservice
Connection closed

核心概念:文档中心 | UOTA TCP客户端示例 | 协议说明

协议说明


核心概念:文档中心 | UOTA TCP客户端示例 | 通信流程

通信流程

  1. 客户端连接TCP服务器
  2. 服务端发送时间戳响应
  3. 客户端发送加密的UOTA信息请求
  4. 服务端返回加密的UOTA信息响应
  5. 客户端解密并解析响应数据

核心概念:文档中心 | UOTA TCP客户端示例 | 消息格式

消息格式

所有消息均为JSON格式,以换行符(\n)分隔:

{
"type": "消息类型",
"data": "消息数据",
"header": {
"sdkVersion": "SDK版本",
"ignoreVerificationTime": true/false,
"encrypt": true/false
}
}

核心概念:文档中心 | UOTA TCP客户端示例 | 加密算法

加密算法

  • 算法: AES-256-CBC
  • 填充: PKCS5Padding
  • IV: 16字节随机生成
  • 编码: Base64
  • 测试密钥: 12345678123456781234567812345678

核心概念:文档中心 | UOTA TCP客户端示例 | 配置参数

配置参数


核心概念:文档中心 | UOTA TCP客户端示例 | 可修改的参数

可修改的参数

// 服务器配置
#define SERVER_IP "192.168.1.87"
#define SERVER_PORT 8520

// 加密密钥 (测试环境)
#define SECRET_KEY "12345678123456781234567812345678"

核心概念:文档中心 | UOTA TCP客户端示例 | 设备信息配置

设备信息配置

// 在create_uota_request函数中修改
json_object_object_add(request_data, "mac", json_object_new_string("A8:20:06:B7:C8:B9"));
json_object_object_add(request_data, "cpu", json_object_new_string("02c0008145f0462078a3840038350b53"));
json_object_object_add(request_data, "platform", json_object_new_string("allwinner"));

核心概念:文档中心 | UOTA TCP客户端示例 | SDK版本配置

SDK版本配置

// 在create_uota_request函数中修改
json_object_object_add(header, "sdkVersion", json_object_new_string("allwinner-202510-01"));

核心概念:文档中心 | UOTA TCP客户端示例 | 错误处理

错误处理


核心概念:文档中心 | UOTA TCP客户端示例 | 常见错误及解决方法

常见错误及解决方法

  1. 编译错误: 找不到头文件

    解决方法: 安装对应的开发库
    sudo apt-get install libssl-dev libjson-c-dev libjsoncpp-dev
  2. 运行错误: 连接失败

    解决方法: 检查服务器地址和端口是否正确,确保服务器正在运行
  3. 加密解密失败

    解决方法: 检查密钥是否正确,确保密钥长度为32字节
  4. JSON解析失败

    解决方法: 检查服务器返回的数据格式是否正确

核心概念:文档中心 | UOTA TCP客户端示例 | 注意事项

注意事项

  1. 生产环境密钥: 生产环境中必须使用安全的密钥管理方式,避免硬编码
  2. 时间戳校验: 生产环境应启用时间戳校验,防止重放攻击
  3. 错误处理: 实际应用中需要完善错误处理和重试机制
  4. 内存管理: C语言版本需要注意内存泄漏问题
  5. 网络异常: 需要处理网络断开、超时等异常情况

核心概念:文档中心 | UOTA TCP客户端示例 | 开发建议

开发建议

  1. 日志记录: 添加详细的日志记录,便于调试和监控
  2. 配置文件: 使用配置文件管理服务器地址、密钥等参数
  3. 异步处理: 对于高并发场景,考虑使用异步I/O
  4. 连接池: 对于频繁请求,考虑使用连接池复用连接
  5. 安全加固: 添加证书验证、防重放攻击等安全措施

核心概念:文档中心 | UOTA TCP客户端示例 | 技术支持

技术支持

如有问题,请参考:

AI 问答