分段传输网页源码

This commit is contained in:
murmur 2024-12-17 23:26:13 +08:00
parent 988fbae7f8
commit d3f58b4768

View File

@ -72,33 +72,35 @@ static void send_chunk_end(uint8_t sn)
#define CHUNK_SIZE 512
// 处理配置页面请求
static void handle_config_page(uint8_t sn)
static void handle_index_page(uint8_t sn)
{
char buffer[CHUNK_SIZE];
// 先将完整的HTML内容格式化到一个临时缓冲区
char full_page[1024*15]; // 确保足够大
int total_len = sprintf(full_page, index_html,0,
gWIZNETINFO.mac[0], gWIZNETINFO.mac[1], gWIZNETINFO.mac[2],
gWIZNETINFO.mac[3], gWIZNETINFO.mac[4], gWIZNETINFO.mac[5],
gWIZNETINFO.ip[0], gWIZNETINFO.ip[1], gWIZNETINFO.ip[2], gWIZNETINFO.ip[3],
gWIZNETINFO.sn[0], gWIZNETINFO.sn[1], gWIZNETINFO.sn[2], gWIZNETINFO.sn[3],
gWIZNETINFO.gw[0], gWIZNETINFO.gw[1], gWIZNETINFO.gw[2], gWIZNETINFO.gw[3]);
// 发送响应头
// 发送分块传输的响应头
send_chunked_response_header(sn);
// 分块发送内容
// 分段发送HTML内容
// const int CHUNK_SIZE = 512; // 每个块的大小
int total_len = strlen(index_html);
int sent = 0;
while (sent < total_len) {
int chunk_len = (total_len - sent) > CHUNK_SIZE ? CHUNK_SIZE : (total_len - sent);
memcpy(buffer, full_page + sent, chunk_len);
send_chunk(sn, buffer, chunk_len);
// 计算当前块的大小
int chunk_len = ((total_len - sent) > CHUNK_SIZE) ?
CHUNK_SIZE : (total_len - sent);
// 发送数据块
send_chunk(sn, index_html + sent, chunk_len);
sent += chunk_len;
}
// 发送结束块
send_chunk_end(sn);
// 等待数据发送完成
HAL_Delay(1);
// 关闭连接
disconnect(sn);
}
// 解析并更新网络配置
@ -164,7 +166,7 @@ typedef struct {
// 4.泵速度2个字节每个泵的速度占用一个字节表示当前泵设定的速度百分比
// 5.气泡感应器读值1表示监测到气泡0表示没有气泡共1个字节
// 6.急停按键状态1个字节1为按下0为正常。
// 7.错误码1个字节用于监控当前系统总体状态如通信异常、控制异常等,具体错误码待定
// 7.错误码1个字节用于监控当前系统总体状态如通信异常、控制异常等<EFBFBD><EFBFBD>,具体错误码待定
// 8.初始化状态1个字节 0表示初始化执行中1表示初始化执行成功2表示初始化执行失败。
typedef struct {
uint8_t deviceStatus; // 下挂设备状态
@ -316,7 +318,7 @@ void http_server_task(void)
handle_netconfig_request(HTTP_SERVER_SOCKET);
}
else {
handle_config_page(HTTP_SERVER_SOCKET);
handle_index_page(HTTP_SERVER_SOCKET);
}
}
else if(req.method == HTTP_POST && strcmp(req.uri, "/config") == 0) {