lwip网络通信socket_LWIP之TCP通信

本文档详细介绍了如何在UCOSII操作系统上使用lwip库创建TCP进程,监听并处理连接。首先创建一个任务进程,然后通过netconn_new、netconn_bind和netconn_listen建立并启动TCP监听。当有新的连接请求时,调用netconn_accept接受连接,并进入tcp_process函数处理数据。在tcp_process中,读取接收到的数据,检查是否为HTTP GET请求,如果是,则返回预设的HTML响应。最后关闭连接并释放资源。
摘要由CSDN通过智能技术生成

1、在ucosII系统中创建一个进程:

//TCP  2000

OSTaskCreate(tcp, (void *)0, &gstack_task_socket4[TASK_SOCKET4_STK_SIZE - 1], 14);

OSTaskNameSet(14, "tcp", &os_err);

2、进程的具体处理:

void  tcp(void *arg)

{

struct netconn   *__pstConn, *__pstNewConn;

//建立TCP连接

__pstConn = netconn_new(NETCONN_TCP);

//将建立的连接进行端口绑定

netconn_bind(__pstConn, NULL, 2000);  //HTTP_PORT,80端口

//开始监听

netconn_listen(__pstConn);

while(1)

{

//接收外部来的连接

__pstNewConn = netconn_accept(__pstConn);

//具体处理函数

tcp_process(__pstNewConn);

//如果连接有效,删除连接

if (__pstNewConn == NULL)

continue;

netconn_delete(__pstNewConn);

OSTimeDly(100);

}

具体处理函数如下:

void tcp_process(struct netconn *conn)

{

struct netbuf *inbuf;

char *rq;

u16_t len;

///获取数据

inbuf = netconn_recv(conn);

if(inbuf != NULL)

{

netbuf_data(inbuf, &rq, &len);

/* HTTP "GET /\r\n" */

if(rq[0] == 'G' && rq[1] == 'E' && rq[2] == 'T') {

netconn_write(conn, http_html_hdr, sizeof(http_html_hdr),

NETCONN_NOCOPY);

//发送数据

netconn_write(conn, indexdata, sizeof(indexdata),

NETCONN_NOCOPY);

//netconn_write(conn,tcp_data_send,sizeof(tcp_data_send),NETCONN_NOCOPY);

//发送数据

netconn_close(conn);

//关闭连接

}

}

memp_free(MEMP_NETBUF, inbuf);

}

补充一点,两个数组的定义:

char indexdata1[] =

" \

Mr Lee's test page \

\

Hello , Mr Lee!\r\n \

Good Luck to you !\r\n \

This is a small test page. \

\

";

char http_html_hdr[] =

"HTTP/1.0 200 OK\r\n\

Content-type: text/html\r\n\r\n";

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值