求助:LWIP网页访问问题!
问你一个问题,我用LWIP做一个服务器,HTTP任务如下时,
while (1) {
newconn = netconn_accept(conn);
if (newconn != NULL) {
struct netbuf *buf;
void *data;
u16_t len;
while ((buf = netconn_recv(newconn)) != NULL) {
do {
netbuf_data(buf, &data, &len);
err = netconn_write(newconn, data, len, NETCONN_COPY);
} while (netbuf_next(buf) >= 0);
netbuf_delete(buf);
}
netconn_close(newconn);
netconn_delete(newconn);
}
}
}
我看网上大部分例程都是这种形式,可是我用这种完全访问不到网页,跟踪程序发现有发送但是不显示网页,原因在于当发完数据时,又调用netconn_recv(while的原因)获取邮箱,阻塞了任务,就动行其它任务了,进不了netconn_close关闭,第二次访问时先进入netconn_close关闭,关闭上一次访问,再进入接收发,因此无法显示网页,
当我把while 改为if时,如下:
while (1) {
newconn = netconn_accept(conn);
if (newconn != NULL) {
struct netbuf *buf;
void *data;
u16_t len;
if((buf = netconn_recv(newconn)) != NULL) {
do {
netbuf_data(buf, &data, &len);
err = netconn_write(newconn, data, len, NETCONN_COPY);
} while (netbuf_next(buf) >= 0);
netbuf_delete(buf);
}
netconn_close(newconn);
netconn_delete(newconn);
}
}
}
可以正常访问到网页,因为每一次发完数据,服务器这边主动关闭.但是有一个问题是,对每个请求我都关闭一次,如果我一个网页上有5张图片,就会对每一张图片都会请求关一次,共关经历6次三次握手和关闭环节,有没有什么有效方法可以使得对一个网页访问只有一次关闭??? 一次性把所有数据传完不就得了?
一般服务器,发完数据都是关掉网络连接的. 回复【1楼】itspy
-----------------------------------------------------------------------
关键在于我发网页上很多图片,所以必须是有每个图片请求来我才发吧 lwip资料好少啊。。。
页:
[1]