woshiwowo 发表于 2011-1-14 16:32:38

求助: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次三次握手和关闭环节,有没有什么有效方法可以使得对一个网页访问只有一次关闭???

itspy 发表于 2011-1-14 17:54:01

一次性把所有数据传完不就得了?
一般服务器,发完数据都是关掉网络连接的.

woshiwowo 发表于 2011-1-17 10:31:33

回复【1楼】itspy
-----------------------------------------------------------------------

关键在于我发网页上很多图片,所以必须是有每个图片请求来我才发吧

richards 发表于 2012-10-15 10:21:06

lwip资料好少啊。。。
页: [1]
查看完整版本: 求助:LWIP网页访问问题!