花了一个暑假的时间 终于把基于stm32的web服务器做好了,虽然也没什么用,但还算也学习到了些东西。额,我使用的硬件是stm32+28j60 软件协议时uip 编辑器是keil 仿真器是jlink 开发板是自己画的。 使用浏览器访问web服务器时,单片机是服务器的主机,电脑是从机,端口统一采用80端口;在uip里是这样处理的:
void httpd_init(void)
{
fs_init();
/* Listen to port 80. */
uip_listen(HTONS(80));
}
/*-----------------------------------------------------------------------------------*/
void httpd_appcall(void)
{
ushort j;
post_func_t post_func;
switch(uip_conn->lport) {
/* This is the web server: */
case HTONS(80):
。。。。。。。。。。。。。。
监听80端口 ,如果有连接 就进行处理。
处理的过程 大概就是 先判断是 get命令 ,还是post 然后再进行相应的处理。
比如如果是get命令,就判断后面跟随的是请求哪个网页,根据名称 找到对应的网页。网页在单片机里是以文件的形式存放,如下:
const struct {
char *name;
const uchar *file_ptr;
ushort len;
file_type_t type; /* DYNAMIC: contains variable data and needs processing
STATIC: contains static data, no processing needed
STATIC_SPC: contains static data, but must be password protected.
DYNAMIC_NOSPC: contains variable data, but needs no password
*/
} file_dir [] = {
(char *)"index.htm", index_htm, INDEX_SIZE, DYNAMIC_NOSPC,
(char *)"400.htm", http_status_400, sizeof(http_status_400), STATIC,
(char *)"404.htm", http_status_404, sizeof(http_status_404), STATIC,
(char *)"501.htm", http_status_501, sizeof(http_status_501), STATIC,
(char *)"503.htm", http_status_503, sizeof(http_status_503), STATIC,
(char *)"password.htm", password_htm, PASSWORD_SIZE, STATIC,
#if TRANSIT_WEB_TIMEOUT
(char *)"duplicate", duplicate_htm, DUPLICATE_SIZE, STATIC,
#endif
(char *)"left.htm", left_htm, LEFT_SIZE, STATIC,
(char *)"top.htm", top_htm, TOP_SIZE, DYNAMIC_NOSPC,
(char *)"bg.gif", bg_gif, BG_SIZE, STATIC,
(char *)"pwconfirm", passwordConfirmation_htm,PASSWORDCONFIRMATION_SIZE, STATIC,
(char *)"sys", sys_htm, SYS_SIZE, DYNAMIC,
(char *)"postdemo", postdemo_htm, POSTDEMO_SIZE, DYNAMIC,
(char *)"get", get_htm, GET_SIZE, DYNAMIC_NOSPC,
(char *)"get_no", get_htm_no, GET_SIZE, STATIC_SPC,
(char *)"upload", upload_htm, UPLOAD_SIZE, STATIC_SPC,
(char *)"uploaddone", uploaddone_htm, UPLOADDONE_SIZE, DYNAMIC,
};
这个文件结构体的意思是:文件以 名称 、 文件指针、 长度 、类型 这四种格式存放,比如:(char *)"left.htm", left_htm, LEFT_SIZE, STATIC, 这是一个名字为left的htm网页,地址是left_htm(一个数组),长度是一个宏定义值,静态网页。
如果 有get请求这个网页,那么uip(协议栈) 就会把这个网页 返回回去。
先简单点吧,后面陆续再上详细资料
|