📄 net_http.c
字号:
void APP_HTTP(void) //http应用处理程序
{
u16 i,Len=Start_HTTP;//Data_Len;
//UINT Open_Count_Len; //打开网页次数用ASC码表示时占用的字节数
//UINT Content_Len_Len; //实体长度用ASC码表示时占用的字节数
//UINT Content_Len_DEC; //实体长度
//UINT Receive_PACK_HTTP_Len; //收到数据包中http的长度
//Receive_PACK_HTTP_Len=Receive_Buffer[14+2]*0x100+Receive_Buffer[14+2+1]-40;
Open_Count++;
Open_Count_ASC_Byte=Change_Dec_ASC(Open_Count,Open_Count_ASC); //打开次数用ASC码表示时占用的字节数
Content_Len=Open_Count_ASC_Byte+sizeof(web_page1)+sizeof(web_page2); //实长度的整数表示
Content_Len_ASC_Byte=Change_Dec_ASC(Content_Len,Content_Len_ASC); //实体长度用ASC码表示时占用的字节数
//Data_Len=sizeof(html_header1)-1;
for (i=0;i<(sizeof(html_header1)-1);i++)
Send_Buffer[Len++]=html_header1[i]; //写HTTP头
for (i=0;i<Content_Len_ASC_Byte;i++)
Send_Buffer[Len++]=Content_Len_ASC[Content_Len_ASC_Byte-i-1]; //实体长度
//Data_Len=sizeof(html_header2);
for (i=0;i<sizeof(html_header2);i++)
Send_Buffer[Len++]=html_header2[i];
//-----------------------------------------------------------------------------------
//Data_Len=sizeof(web_page1)-1;
for (i=0;i<(sizeof(web_page1)-1);i++)
Send_Buffer[Len++]=web_page1[i]&0xff;
for (i=0;i<Open_Count_ASC_Byte;i++)
Send_Buffer[Len++]=Open_Count_ASC[Open_Count_ASC_Byte-i-1];
//Data_Len=sizeof(web_page2);
for (i=0;i<sizeof(web_page2);i++)
Send_Buffer[Len++]=web_page2[i]&0xff; //写HTTP实体
Send_Buffer[Len]=0;
Send_Buffer[Len+1]=0;
/*
Len=Start_HTTP;
for(i=0;i<100;i++)
Send_Buffer[Len++]=i+1;
*/
//-----------------------------------------------------------------------------------
DATA_Len_HTTP=Len-Start_HTTP; //HTTP全部数据长度
DATA_Len_TCP=DATA_Len_HTTP+20; //TCP包数据总长度
IP_PACK_Len=DATA_Len_TCP+20; //IP包数据长度
TCP_ISN_A=TCP_ISN_O+Receive_PACK_HTTP_Len;
TCP_Symbol_Send=0x18; //TCP标志,ACK PSH
HEAD_TCP(); //TCP首部
HEAD_IP(); //IP首部
HEAD_Ethernet(); //以太网头
//SumCheck(Send_Buffer,Start_TCP,
NET_Send_Packet(Send_Buffer,Len); //发送数据包
//printf("发送HTTP数据包 Http数据长度为 %d \n",DATA_Len_HTTP);
TCP_ISN+=DATA_Len_HTTP;
/*DATA_Len_TCP=20;
IP_PACK_Len=DATA_Len_TCP+20;
TCP_Symbol_Send=0x11; //? 似乎可以改成0x01
HEAD_TCP();
HEAD_IP();
HEAD_Ethernet();
NET_Send_Packet(Send_Buffer,Start_HTTP);
TCP_ISN++;*/
//TCP_State=4; //理论上应该是4
}
void Send_HTTP_Response(void) //发送HTTP的请求响应包
{
u16 i,Len=Start_HTTP,Data_Len;
//UINT Open_Count_ASC_Byte; //打开次数用ASC码表示时占用的字节数
//UINT Content_Len; //http内容长度
//UINT Content_Len_ASC_Byte; //内容长度用ASC码表示时占用的字节数
//UINT Receive_PACK_HTTP_Len; //收到的HTTP包中,http数据长度
//Receive_PACK_HTTP_Len=Receive_Buffer[14+2]*0x100+Receive_Buffer[14+2+1]-40;
Open_Count++;
Open_Count_ASC_Byte=Change_Dec_ASC(Open_Count,Open_Count_ASC);
Content_Len=Open_Count_ASC_Byte+sizeof(web_page1)+sizeof(web_page2); //HTTP内容长度
Content_Len_ASC_Byte=Change_Dec_ASC(Content_Len,Content_Len_ASC);
Data_Len=sizeof(html_header1)-1;
for (i=0;i<Data_Len;i++)
Send_Buffer[Len++]=html_header1[i]; //写HTTP头
for (i=0;i<Content_Len_ASC_Byte;i++)
Send_Buffer[Len++]=Content_Len_ASC[Content_Len_ASC_Byte-i-1]; //实体长度
Data_Len=sizeof(html_header2);
for (i=0;i<Data_Len;i++)
Send_Buffer[Len++]=html_header2[i];
DATA_Len_HTTP=Len-Start_HTTP; //HTTP包长度
DATA_Len_TCP=DATA_Len_HTTP+20; //TCP数据包长度
IP_PACK_Len=DATA_Len_TCP+20;
TCP_ISN_A=TCP_ISN_O+Receive_PACK_HTTP_Len;
TCP_Symbol_Send=0x18; //ACK PSH
HEAD_TCP();
HEAD_IP();
HEAD_Ethernet();
NET_Send_Packet(Send_Buffer,Len); //发送数据包
TCP_ISN+=DATA_Len_HTTP;
}
void Send_HTTP_Content(void) //发送HTTP的内容数据包
{
u16 i,Len=Start_HTTP,Data_Len;
//UINT HTTP_Data_Len;
//UINT TCP_Data_Len;
Data_Len=sizeof(web_page1)-1;
for (i=0;i<Data_Len;i++)
Send_Buffer[Len++]=web_page1[i];
for (i=0;i<Open_Count_ASC_Byte;i++)
Send_Buffer[Len++]=Open_Count_ASC[Open_Count_ASC_Byte-i-1];
Data_Len=sizeof(web_page2);
for (i=0;i<Data_Len;i++)
Send_Buffer[Len++]=web_page2[i];
DATA_Len_HTTP=Len-Start_HTTP; //HTTP包长度
DATA_Len_TCP=DATA_Len_HTTP+20; //TCP数据包长度
IP_PACK_Len=DATA_Len_TCP+20;
TCP_ISN_A=TCP_ISN_O+Receive_PACK_HTTP_Len;
TCP_Symbol_Send=0x18; //ACK PSH
HEAD_TCP();
HEAD_IP();
HEAD_Ethernet();
NET_Send_Packet(Send_Buffer,Len); //发送数据包
TCP_ISN+=DATA_Len_HTTP;
}
u16 Change_Dec_ASC(u16 Data,u8 *ASC) //将数字转换成ASC码
{
u16 i,Len=0,Data_n=Data;
for(i=0;i<10;i++)
{
ASC[Len++]=((Data_n%10)+48)&0xff;
if((Data_n=Data_n/10)==0)
break;
}
return Len;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -