【原创】LWIP技术--->答网友问080501

本文针对一个简单的HTTP服务器程序进行了分析,指出了其中存在的问题,并提供了详细的改进建议,包括正确的HTTP响应头设置、内存管理和HTML数据验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网友 yuppie->硬件 提出来的问题:

void httpd_thread(void*arg)
{
    struct netconn *conn,*newconn;
    conn=netconn_new(NETCONN_TCP);/*创建新的连接标识*/
    netconn_bind(conn,NULL,80);/*绑定到80号端口*/
    netconn_listen(conn);/*开始监听端口*/
    while(1){
        newconn=netconn_accept(conn);/*建立连接*/
        if(newconn!=NULL){
            struct netbuf *buf;
            char *rq;
            u16_t len;
            /*接收数据*/
            while((buf=netconn_recv(newconn))!=NULL){
            do{
                netbuf_data(buf,&(void*)rq,&len);
            }while(netbuf_next(buf)>=0);
            netbuf_delete(buf);
    }
    if(rq[0]=='G'&&rq[1]=='E'&&rq[2]=='T')
    {
        netconn_write(newconn,(void*)http_html_hdr,sizeof(http_html_hdr),NETCONN_NOCOPY);
        /*发送静态网页数据*/
        netconn_write(newconn,(void*)indexdata,sizeof(indexdata),NETCONN_NOCOPY);
        netconn_close(newconn);
    }
    netconn_delete(newconn);/*释放本次连接*/
    }
  }
}

对于你以上的代码,整体的过程是思路还算是明确,但是就你给我发的邮件来看,我发现存在以下几点问题,希望你能看看,是否是这里出错:

对于你提出来,说是程序可以ping通,这只能说明你的程序已经响应了ICMP协议,整体LWIP的程序可以正常的运行,你的以太网驱动都没有问题,而HTTP网页却不能打开,问题就是出现在这里。

我希望你能看看HTTP协议,仔细研究一下其工作的过程。对于你以后写这部分的代码有好处。

你给我的邮件main.c文件我已经看过了。

之前我先不谈论你的代码是否有问题,你在接收到主机发送的GET头关键字的时候,你作为从机相应的就不对,按照HTTP的协议,你应该返回的是:

HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n

对于这个语句的意思,你看看文档就知道了。而你仅仅返回的是 Content-type: text/html\r\n\r\n

也许HTTP/1.1 200 OK\r\n这个你在别的地方给发回主机,但是至少你给我的程序里面,我没能看到,希望你仔细核查一下。

在就是你使用指针存储数据的时候,记得最好是分配一下内存malloc一下,要么你就定义一下buffer 免得编译器自动给你分配,到时候程序跑飞也说不定哦。

剩下就是你发的HTML数据了,这里我就不给你检查你写的正确与否了。你自己看看html语言,检查一下看看写的对不对,你也可以把你的那个代码另存为一个*.html的文件,看看浏览器能否打开,这样是最快也最有效的检查。

看了上面的这个,你自己在好好看看你的程序吧。有什么问题,可以直接留言,也可以给我发e_mail。等过段时间我有空了,我把我的源代码给大家共享出来!

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值