码迷,mamicode.com
首页 > 其他好文 > 详细

W5500 学习开发: TCP客户端

时间:2020-05-30 12:29:50      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:解决   路由器   int   w5500   brief   日志   com   怎么   技术   

 

 

 

TCP客户端

 W5500的TCP客户端百度到处都有,而且都是一个模子

简而言之:就是这么写,这么用

 

上菜

/**
* @brief   TCP客户端
* @param   None
* @retval  None
* @warning None
* @example
**/
void do_tcpc(void)
{
    switch(getSn_SR(SOCK_TCPC))                                                           /*获取socket的状态*/
    {
        case SOCK_CLOSED:                                                                     /*socket处于关闭状态*/
            socket(SOCK_TCPC,Sn_MR_TCP,local_port++,Sn_MR_ND);
          break;
        case SOCK_INIT:                                                                         /*socket处于初始化状态*/
            connect(SOCK_TCPC,IP,Port);                /*socket连接服务器*/ 
            
          break;
        case SOCK_ESTABLISHED:                                                              /*socket处于连接建立状态*/
            if(getSn_IR(SOCK_TCPC) & Sn_IR_CON){
                setSn_IR(SOCK_TCPC, Sn_IR_CON);                                      /*清除接收中断标志位*/
            }
            
            MainLen=getSn_RX_RSR(SOCK_TCPC);                                                /*获取接收的数据长度*/
            if(MainLen>0){//接收到数据
                recv(SOCK_TCPC,MainBuffer,MainLen);                                           /*接收来自Server的数据*/
                MainBuffer[MainLen]=0x00;                                                         /*添加字符串结束符*/
                printf("\r\n接收到消息:\r\n");
                UsartOutStrIT(USART1,MainBuffer,MainLen);
                
                BufferManageWrite(&send_manage_struct3,MainBuffer,MainLen,&MainLen);//把数据写入发送缓存
            }
            
          break;
        case SOCK_CLOSE_WAIT:                                                              /*socket处于等待关闭状态*/
            close(SOCK_TCPC); 
          break;
    }
}

 

采用的socket1作为了TCP客户端

技术图片

 

 

 

测试准备工作(需要连接路由器)

保证电脑/手机和W5500在同一个局域网内

1.查看自己电脑的IP地址

技术图片

 

 

2.开启TCP服务器:监听 8080

技术图片

 

 

3.修改程序中连接的IP地址:根据自己的TCP服务器IP地址修改

技术图片

 

 

4.下载测试

单片机串口1 -- 连接CH340 作为日志输出口

单片机串口3 -- 连接485

技术图片

 

 

 

485连接如下:

技术图片

 

 

 

测试

1.单片机程序为自动连接TCP服务器,首先保证有客户端连接

技术图片

 

 

2.服务器发消息给客户端

技术图片

 

 

技术图片

 

 

技术图片

 

 

 

3.485发送消息给TCP服务器

技术图片

 

 

技术图片

 

 

 

程序说明

1.执行DHCP以后执行TCP客户端程序

技术图片

 

 

2.接收数据以后,使用串口1打印输出

把数据存入缓存

技术图片

 

 

 

3.读取缓存里面的数据,并使用串口3输出(485)

技术图片

 

 

 

4.如果串口3(485),缓存里面有数据,则转发给TCP 服务器

技术图片

 

 

 

细节说明

1.从网口接收的数据,为啥要存入缓存

然后再从缓存里面取出来以后再使用串口3发送出去?

答:你想想如何解决下面的问题

1.1.如果服务器突然过来的几条数据间隔很短,你使用串口3发送的时候你还没发送完就接着来新的数据了!

1.2.如果服务器过来的数据非常多,你处理数据的时候又可能有延时,你该怎么做?

1.3.有些时候需要每条数据有时间间隔,然后发送给485

1.4.如果你需要发送完一条以后,需要等待485回复呢?

 

 

2.为啥所有的串口都使用了缓存接收数据?

答:最简单的例子

485接收的数据转发给TCP

你想想如何解决下面的问题:

2.1 假设数据需要处理一下再发送给TCP,如果处理的时候又来了新数据怎么办?

2.2 如果TCP服务器故障,但是我还希望最近的一条数据在服务器恢复以后接着发出去?

 

W5500 学习开发: TCP客户端

标签:解决   路由器   int   w5500   brief   日志   com   怎么   技术   

原文地址:https://www.cnblogs.com/yangfengwu/p/12991839.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!