打印

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

[复制链接]
359|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
スモモ|  楼主 | 2018-8-8 11:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前发了一个帖子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.效果图(这里我程序做了连接限制)

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

458

主题

484

帖子

1

粉丝