設置 | 登錄 | 註冊

作者共發了12篇帖子。

【程序移植】STM32F103C8+ENC28J60网卡也能运行lwip协议栈!

11樓 巨大八爪鱼 2017-3-20 10:11
程序运行时输出:
Hello World!
进入主循环...
tpcb->snd_buf=2682, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
tpcb->snd_buf=2667, err0=0, err1=0, err2=0, err3=0
并且网页也能正常打开。
12樓 巨大八爪鱼 2017-3-20 18:27
【cnt变量自加测试】
#include <string.h>
#include "lwip/tcp.h" // 一般情况下需要包含的头文件

#define STR_AND_SIZE(str) (str), strlen(str)

char len[10]; // 存放HTML内容的长度
char str[200]; // 存放HTML内容

err_t http_recv(void *arg, struct tcp_pcb *tpcb, struct pbuf *p, err_t err)
{
    char name[100];
    char *pstr;
    uint8_t i = 0;
    static uint32_t cnt = 0;
   
    if (p != NULL)
    {
        // 提取页面名称
        pstr = (char *)p->payload;
        while (*pstr++ != ' ');
        while (*pstr != ' ')
            name[i++] = *pstr++;
        name[i] = '\0'; // 不要忘了结束name字符串
        tcp_recved(tpcb, p->tot_len);
       
        // 生成HTML内容
        sprintf(str, "<meta charset=\"gb2312\"><title>获取网页名称</title><div style=\"font-family:Arial\"><b>请求的网页文件名称是: </b>%s</div><div style=\"color:blue\"><b>cnt</b>=%d</div>", name, cnt);
        cnt++;
       
        sprintf(len, "%d", strlen(str)); // HTML内容的长度
        tcp_write(tpcb, STR_AND_SIZE("HTTP/1.1 200 OK\r\nContent-Length: "), TCP_WRITE_FLAG_MORE);
        tcp_write(tpcb, STR_AND_SIZE(len), TCP_WRITE_FLAG_MORE);
        tcp_write(tpcb, STR_AND_SIZE("\r\nKeep-Alive: timeout=5, max=100\r\nConnection: Keep-Alive\r\nContent-Type: text/html\r\n\r\n"), TCP_WRITE_FLAG_MORE);
        tcp_write(tpcb, STR_AND_SIZE(str), 0); // 发送HTML内容
        pbuf_free(p);
    }
    return ERR_OK;
}

err_t http_accept(void *arg, struct tcp_pcb *newpcb, err_t err)
{
    tcp_recv(newpcb, http_recv);
    return ERR_OK;
}

void init_http(void)
{
    struct tcp_pcb *tpcb = tcp_new();
    tcp_bind(tpcb, IP_ADDR_ANY, 80);
    tpcb = tcp_listen(tpcb);
    tcp_accept(tpcb, http_accept);
}

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。