STM32F4+LWIP+HTTP client(TCP client) +DHCP +DNS 例程(说明1)

最近要实现一个使用stm32F4通过http向服务器定时传送数据的功能。好吧,http是啥都不知道,慢慢来折腾。

第一步、首先实现http client连接服务器

               经过一番请教及百度,大致了解了http连接服务器,其实可以看作tcp连接服务器的过程,tcp握手连接完成后,使用http规定的报文格式向服务器传送数据,这样一个http client 向客户端发送数据的功能就基本实现了。

               tcp client的例程比较多,下了个原子哥的tcp client 例程,简单加以修改。

完整代码下载连接://download.csdn.net/download/pwbhbh/12538733

源码1:

 

/**

*@brief        OneNet 数据打包函数
*@param        无
*@return    无
*/

uint16_t HTTP_PostPkt(void)
{    
    u16 len = 0;
    strcat(Http_Sendbuffer, "POST http://www.????? HTTP/1.1\r\n");       //post方式,
    strcat(Http_Sendbuffer, "Content-Type: text/plain\r\n");
    strcat(Http_Sendbuffer, "cache-control: no-cache\r\n");
    strcat(Http_Sendbuffer, "Connection: close\r\n");
    strcat(Http_Sendbuffer, "\r\n");    
    len = strlen(Http_Sendbuffer);
    for(u8 i =0; i < 55; i++)Http_Sendbuffer[len+i] = Sendbuff_Sensor[i];  //55是我自己设置的数据长度
    len = len+55; 
    return len;
}void SendData_Handle(void)
{
    //要发送数据的数据处理函数
}

//设置远端IP地址
void tcp_client_set_remoteip(void)
{
    /*  DNS解析成功   */
    if(GetHttpServerIPfromDNS_Flag)
    {
        /* 将目标服务器的IP写入一个结构体*/
        IP4_ADDR(&rmtipaddr,HttpServerIPfromDNS[0],HttpServerIPfromDNS[1],HttpServerIPfromDNS[2],HttpServerIPfromDNS[3]);    
    }
    else /*  DNS解析失败   */
    {
        IP4_ADDR(&rmtipaddr,HttpServerIPfromLocal[0],HttpServerIPfromLocal[1],HttpServerIPfromLocal[2],HttpServerIPfromLocal[3]);
    }
}

//TCP Client 测试
void tcp_client_test(void)
{
     struct tcp_pcb *tcppcb;      //定义一个TCP服务器控制块
    
    u8 res=0;    
    tcppcb=tcp_new();    //创建一个新的pcb    
    if(tcppcb)            //创建成功
    {                
        tcp_client_set_remoteip();        //选择远端主机IP        
        /* 绑定本地端号和IP地址 */
        tcp_bind(tcppcb,IP_ADDR_ANY,TCP_HTTP_CLIENT_PORT);            
        /* 与目标服务器进行连接,参数包括了目标端口和目标IP */
        tcp_connect(tcppcb,&rmtipaddr,TCP_HTTP_CLIENT_PORT,tcp_client_connected);          
     }
    else res=1;
    delay_ms(15);
    SendData_Handle();                                                           /*数据赋值处理*/
    memset(Http_Sendbuffer,0,512);    
    Length = HTTP_PostPkt();
    while(res==0)
    {
        res = 1 ;
        if(tcp_client_flag&1<<6)//是否收到数据?
        {    
            printf("Http received \r\n");
            tcp_client_flag&=~(1<<6);//标记数据已经被处理了.
        }
        if(tcp_client_flag&1<<5)//是否连接上?
        {
            printf("Http connect succeed. Sending data......\r\n");
            tcp_client_usersent(tcppcb,Http_Sendbuffer,Length);    //发送HTTP数据    
        }
        else
        {
            printf("Http connect failed. \r\n");            
        }                         
    }    
    delay_ms(2);
    tcp_client_connection_close(tcppcb,es);//关闭TCP Client连接
    lwip_periodic_handle();

 

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值