硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2728|回复: 1
收起左侧

[以太网] V7板子 NETCONN 服务器分享(支持多个客户端连接)

[复制链接]

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2019-5-17 16:35:21 | 显示全部楼层 |阅读模式
本帖最后由 在水一方 于 2019-5-17 16:38 编辑

之前发了一个帖子V7双网口同时使用LWIP,例程有NETCONN客户端,现在在来一个服务器的


1.宏定义

#define MEMP_NUM_TCP_PCB                                                 10                                                /* MEMP_NUM_TCP_PCB:同时建立激活的TCP数量 */
#define MEMP_NUM_TCP_PCB_LISTEN                            10                                                /* MEMP_NUM_TCP_PCB_LISTEN:能够监听的TCP连接数量 */
#define MEMP_NUM_TCP_SEG                                            10                                                /* MEMP_NUM_TCP_SEG:最多同时在队列中的TCP段数量 */
#define MEMP_NUM_SYS_TIMEOUT                                10                                                /* MEMP_NUM_SYS_TIMEOUT:能够同时激活的timeout个数 */
#define MEMP_NUM_NETBUF                                            10                                                /* MEMP_NUM_NETBUF: 结构netbuf的数量。(只有在使用顺序API时才需要,如api_lib.c) */
#define MEMP_NUM_NETCONN                                            10                                                /* MEMP_NUM_NETCONN: 结构netconns的数量。*(只有在使用顺序API时才需要,如api_lib.c) */
#define MEMP_NUM_TCPIP_MSG_API                                 20                                                /* MEMP_NUM_TCPIP_MSG_API: 使用的结构tcpip_msg的数量 *(只在使用tcpip.c时才需要) */
#define MEMP_NUM_TCPIP_MSG_INPKT                             20                                                /* MEMP_NUM_TCPIP_MSG_INPKT: 使用的结构tcpip_msg的数量接收数据包。*(只在使用tcpip.c时才需要)  */

创建的TCP连接 不能大于 MEMP_NUM_TCP_PCB ,不然会有问题。

2.服务器的创建

2.1 初始化变量
struct netconn *conn, *newconn;
conn:作为服务器的TCP_PCN
newconn:获取客户端的信息(需要支持很多he护短就需要把MEMP_NUM_TCP_PCB  和  MEMP_NUM_NETCONN 设置比较大 )

2.2 设置conn的网卡信息
netif_set_default(dm9162_netif);                                                     //设置netif为默认网口
conn = netconn_new(NETCONN_TCP);                                             //创建一个TCP链接

2.3 绑定connnetconn_bind(conn, IP_ADDR_ANY, TCP_SERVER_PORT);                  //绑定端口 8000号端口

2.4 监听conn
netconn_listen(conn);                                                                          //进入监听模式

2.5 等待接受客户端连接
err = netconn_accept(conn, &newconn);                                          //接收连接请求   当有链接了返回 newconn 的值,否则返回 0
当有客户端连接时 会申请一个新的 netconn 并赋值给newconn。
2.6 任务创建
sys_thread_new("dm9162serverthread", tcp_server_threadcreat, newconn, DEFAULT_THREAD_STACKSIZE, osPriorityNormal);
这里创建一个子任务,用来处理 当前 newconn 的交互,子任务的处理方法就类似于客户端的处理方式,参考我之前的帖子即可

3.效果图(这里我程序做了连接限制)
111.png 222.png

333.png
444.png

例程,添加带之前工程即可

dm9162_tcp_server_demo.c

4.26 KB, 下载次数: 36

dm9162_tcp_server_demo.h

158 Bytes, 下载次数: 25

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107127
QQ
发表于 2019-5-18 01:25:40 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-19 11:39 , Processed in 0.422707 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表