uip中关于web服务器的简单例子

这是官方文档中的例子代码,以此了解一下uip处理web server是怎么样的。

struct example5_state
{
	char *dataptr;
	unsigned int dataleft;
}

void example5_init(void)
{
	uip_listen(HTONS(80));
	uip_listen(HTONS(81));
}

void example5_app(void)
{
	struct example5_state *s;
	
	s = (struct example5_state)uip_conn->appstate;
	
	if(uip_connected())
	{
		switch(uip_conn->lport)
		{
		case HTONS(80):
			s->dataptr = data_port_80;
			s->dataleft = datalen_port_80;
			break;
		case HTONS(81):
			s->dataptr = data_port_81;
			s->dataleft = datalen_port_81;
			break;
		}
		uip_send(s->dataptr, s->dataleft);
		return;
	}
	
	if(uip_acked())
	{
		if(s->dateleft < uip_mss())
		{
			uip_close();
			return;
		}
		s->dataptr += uip_conn->len;
		s->dataleft -= uip_conn->len;
		uip_send(s->dataptr, s->dataleft);
	}


结构体中含有要发送文件的地址和长度。初始化函数中分别监听80和81端口。app函数中根据端口值处理不同连接。这个app通过回应驱动即uip_asked(),如果发送文件长度小于uip_mss()中返回的长度,则表示文件发送完了,执行uip_close()。没有的话,调整文件指针和长度信息,继续通过uip_send()发送。

你可能感兴趣的:(uip中关于web服务器的简单例子)