⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 net_http.c

📁 TI的2812控制交通灯
💻 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 + -