 |
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); }
|