网页的代码为[mw_shl_code=c,true]HTTP/1.1 200 OK
Content-type: text/html
<html><head><title>Congrats!</title></head><body><h1>Welcome to our lwIP HTTP server!</h1><p>This is a small test page, served by httpserver-netconn.</body></html>
[/mw_shl_code]
webserver收到一个TCP连接请求就开启一个子线程,子线程代码为[mw_shl_code=c,true]//TCP服务器子线程任务函数
static void tcp_server_thread_task(void *p_arg)
{
OS_ERR err;
err_t recv_err,write_err;
struct netconn *conn;
struct netbuf *recvbuf;
char *data;
u16 len;
u8 i;
conn=(struct netconn *)p_arg;
//conn->recv_timeout = 10;
while(1)
{
recv_err=netconn_recv(conn,&recvbuf);
if(recv_err==ERR_OK)
{
netbuf_data(recvbuf,(void **)&data,&len);
//printf("%s",data);
if (len>=5 &&
data[0]=='G' &&
data[1]=='E' &&
data[2]=='T' &&
data[3]==' ' &&
data[4]=='/' ) {
write_err=netconn_write(conn, http_index_html, sizeof(http_index_html), NETCONN_COPY);//发送网页
}
netbuf_delete(recvbuf); //不要忘记释放BUF
}
else
{
netconn_close(conn);
netconn_delete(conn);
for(i=0;i<TCPSERVER_THREAD_MAX_NUM;i++)
{
if(TCPSERVER_THREAD.THREAD_TASK_PRIO==OSTCBCurPtr->Prio)
{
TCPSERVER_THREAD.flag_use=0;
break;
}
}
printf("%d子线程断开与服务器连接
",i);
OSTaskDel(NULL,&err);//删除任务自身
}
}
}[/mw_shl_code]现在的问题是,服务器返回给浏览器网页之后,要关闭TCP连接,浏览器才会显示出网页内容,如果不关闭则显示不了。有人遇到过这种情况,知道什么原因吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
定义为Transfer-Encoding: chunked后,你发送的数据包就要符合chunked的格式
如果一个HTTP消息(请求消息或应答消息)的Transfer-Encoding消息头的值为chunked,那么,消息体由数量未定的块组成,并以最后一个大小为0的块为结束。
每一个非空的块都以该块包含数据的字节数(字节数以十六进制表示)开始,跟随一个CRLF (回车及换行),然后是数据本身,最后块CRLF结束。在一些实现中,块大小和CRLF之间填充有白空格(0x20)。
最后一块是单行,由块大小(0),一些可选的填充白空格,以及CRLF。最后一块不再包含任何数据,但是可以发送可选的尾部,包括消息头字段。消息最后以CRLF结尾。
就不是直接发送网页数据了,你现在直接发出去肯定解析出乱码。
一周热门 更多>