简单测试了一下,还不错。连上ESP8266的热点,打开IE浏览器地址栏输入192.168.4.1回车可看到HTTP测试成功 字样。使用其他的浏览器(谷歌)结果会下载一个文件,打开下载的文件可看到成功字样,不知道什么情况,我html小白一枚。下面是程序,很简单。
全局变量
uint8_t http_head[] = "HTTP/1.1 200 OK\r\n\r\nHTTP测试成功";
struct espconn tcpserver;
几个回调函数
void ICACHE_FLASH_ATTR
tcpserver_recon_cb(void *arg, sint8 errType)//异常断开回调
{
struct espconn *pespconn = (struct espconn *)arg;
os_printf("\r\n异常断开");
}
void ICACHE_FLASH_ATTR
tcpserver_discon_cb(void *arg)//正常断开回调
{
struct espconn *pespconn = (struct espconn *)arg;
os_printf("\r\n正常断开");
}
void ICACHE_FLASH_ATTR
tcpclient_sent_cb(void *arg)//发送回调
{
struct espconn *pespconn = (struct espconn *)arg;
espconn_disconnect(pespconn);//断开连接
}
监听函数
void ICACHE_FLASH_ATTR
tcpserver_listen(void *arg)//服务器被链接回调
{
struct espconn *pespconn = (struct espconn *)arg;
espconn_regist_reconcb(pespconn, tcpserver_recon_cb);//开启异常断开回调
espconn_regist_disconcb(pespconn, tcpserver_discon_cb);//开启正常断开回调
espconn_regist_recvcb(pespconn, tcpserver_recv);//开启接收回调
espconn_regist_sentcb(pespconn, tcpclient_sent_cb);//开启发送成功回调
}
接收函数
void ICACHE_FLASH_ATTR
tcpserver_recv(void *arg, char *pdata, unsigned short len)//接收函数
{
char * http_flg = NULL;
unsigned short i,web_len = 0;
struct espconn *pespconn = (struct espconn *)arg;
http_flg = strstr(pdata,"HTTP");
if(http_flg != NULL){
espconn_send(pespconn,http_head,sizeof(http_head));
}
}
配置函数
void ICACHE_FLASH_ATTR
tcp_server(void)//开启tcp服务器
{
tcpserver.proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp));
tcpserver.proto.tcp->local_port = 80;//监听本地端口号
tcpserver.type = ESPCONN_TCP;
tcpserver.state = ESPCONN_NONE;
espconn_regist_connectcb(&tcpserver, tcpserver_listen);//链接成功回调
espconn_accept(&tcpserver);//开启TCP服务器
espconn_regist_time(&tcpserver, 1, 0);//设置服务器超时时间为1秒
}
主函数
void ICACHE_FLASH_ATTR
sys_init_cb(void)//初始化完成后回调函数
{
os_printf("\r\nHTTP测试");
tcp_server();//开启tcp服务器
}
void ICACHE_FLASH_ATTR
user_init(void)
{
uart_init(115200,115200);
wifi_set_opmode_current(STATIONAP_MODE);//设置WiFi工作模式
system_init_done_cb(sys_init_cb);//创建初始化完成后回调函数
}