📄 httpd.c
字号:
#include "lwip/sys.h"
#include "lwip/api.h"
/* This is the data for the actual web page.
Most compilers would place this in ROM. */
const static char indexdata[] =
"<html> \
<head><title>A test page</title></head> \
<body> \
This is a small test page. \
</body> \
</html>";
const static char http_html_hdr[] =
"Content-type: text/html\r\n\r\n";
/* This function processes an incomming connection. */
static void
process_connection(struct netconn *conn)
{
struct netbuf *inbuf;
char *rq;
int len;
/* Read data from the connection into the netbuf inbuf.
We assume that the full request is in the netbuf. */
inbuf = netconn_recv(conn);
/* Get the pointer to the data in the first netbuf
fragment which we hope contains the request. */
netbuf_data(inbuf, &rq, &len);
/* Check if the request was an HTTP "GET /\r\n". */
if(rq[0] == 'G' && rq[1] == 'E' &&
rq[2] == 'T' && rq[3] == ' ' &&
rq[4] == '/' && rq[5] == '\r' &&
rq[6] == '\n') {
/* Send the header. */
netconn_write(conn, http_html_hdr, sizeof(http_html_hdr),NETCONN_NOCOPY);
/* Send the actual web page. */
netconn_write(conn, indexdata, sizeof(indexdata),
NETCONN_NOCOPY);
/* Close the connection. */
netconn_close(conn);
}
}
}
void httpd_thread(void *arg)
{
struct netconn *conn, *newconn;
/* Create a new TCP connection handle. */
conn = netconn_new(NETCONN_TCP);
/* Bind the connection to port 80 on any
local IP address. */
netconn_bind(conn, NULL, 80);
/* Put the connection into LISTEN state. */
netconn_listen(conn);
/* Loop forever. */
while(1) {
/* Accept a new connection. */
newconn = netconn_accept(conn);
/* Process the incomming connection. */
process_connection(newconn);
/* Deallocate connection handle. */
netconn_delete(newconn);
}
return 0;
}
void httpd_init(void)
{
sys_thread_new(httpd_thread, NULL,TCPIP_THREAD_PRIO);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -