查看: 576|回复: 2

[原创] 【朝花夕拾】RT1170 LWIP socket client demo

[复制链接]

该用户从未签到

656

主题

6312

帖子

0

超级版主

Rank: 8Rank: 8

积分
20042
最后登录
2024-4-26
发表于 2023-7-17 15:58:58 | 显示全部楼层 |阅读模式
【朝花夕拾】RT1170LWIP socket client demo
一,文档描述
最近有客户想要一个RT1170 LWIP socket client的代码,但是实际做下来总是遇到一些问题,所以小编自己在SDK的基础上做了一个简单的例程,并分享出来。
二,代码修改
代码平台:
MIMXRT1170-EVKB
SDK_2_13_1_MIMXRT1170-EVKB
MCUXpressoIDE v11.7.1
代码基于SDK工程lwip_ping_freertos_cm7.
这个代码本身已经添加了socket的相关文件,所以修改起来很简单,只需要添加socket的相关头文件,还有应用任务皆可。
在原有代码基础上:
添加socket服务器地址,端口,以及发送信息。
  1. #define INIT_THREAD_STACKSIZE 1024
  2. /*! @brief Priority of the temporary lwIP initialization thread. */
  3. #define INIT_THREAD_PRIO DEFAULT_THREAD_PRIO
  4. #define   HOST_NAME       "192.168.0.100"
  5. #define BUF_LEN  100
  6. uint8_t senddata[]= "Socket client test";
  7. #define PORT            54321
  8. #define IP_ADDR        "192.168.0.100"
复制代码



屏蔽stack_init中ping的调用:
//  ping_init(&netif_gw);
添加socketclient线程:
sys_thread_new("socketclient",socketclient_thread, NULL, DEFAULT_THREAD_STACKSIZE, DEFAULT_THREAD_PRIO);
线程函数如下:
  1. static void socketclient_thread(void *arg)
  2. {
  3.           int sock = -1,rece;
  4.           struct sockaddr_in client_addr;

  5.           char* host_ip;
  6.           ip4_addr_t dns_ip;
  7.           err_t err;

  8.           uint32_t *pSDRAM= pvPortMalloc(BUF_LEN);//
  9.             host_ip = HOST_NAME ;
  10.             PRINTF("host name : %s , host_ip : %s\r\n",HOST_NAME,host_ip);

  11.                 //  while(1)
  12.                 //  {
  13.                           PRINTF("Start server Connect !\r\n");
  14.                            // create connection
  15.                        sock = socket(AF_INET, SOCK_STREAM, 0);
  16.                        if (sock < 0)
  17.                        {
  18.                          PRINTF("Socket error\n");
  19.                          vTaskDelay(10);
  20.                       //   continue;
  21.                         }
  22.                        client_addr.sin_family = AF_INET;
  23.                        client_addr.sin_port = htons(PORT);
  24.                        client_addr.sin_addr.s_addr = inet_addr(host_ip);
  25.                        memset(&(client_addr.sin_zero), 0, sizeof(client_addr.sin_zero));


  26.                        if (connect(sock, (struct sockaddr *)&client_addr,  sizeof(struct sockaddr)) == -1)
  27.                        {
  28.                           PRINTF("Connect failed!\r\n");
  29.                           closesocket(sock);
  30.                           vTaskDelay(10);
  31.                          // continue;
  32.                        }

  33.                        PRINTF("Connect to server successful!\r\n");

  34.                        //  PRINTF("\r\n************************************************************\n\r");
  35.                        //  PRINTF("\r\n Begin write\n\r");
  36.                        write(sock,senddata,sizeof(senddata));
  37.                        while (1)
  38.                        {
  39.                               //receive data
  40.                           rece = recv(sock, (uint8_t*)pSDRAM, BUF_LEN, 0);//BUF_LEN
  41.                           if (rece <= 0)
  42.                             break;

  43.                           PRINTF("recv %d len data\r\n",rece);
  44.                           PRINTF("%.*s\r\n",rece,(uint8_t*)pSDRAM);
  45.                           write(sock,pSDRAM,rece);

  46.                        }
  47.                        //rec data process
  48.                        memset(pSDRAM,0,BUF_LEN);
  49.                        closesocket(sock);
  50.                     vTaskDelay(10000);//about 10s //10000
  51.                  // }

  52. }
复制代码



三,测试结果
   首先使用电脑配置以太网IP为服务器IP:
    192.168.0.100
socket_server_config.png
配置好之后,结合测试软件USR-TCP232-Test, 配置成 TCP server,local IP为:192.168.0.100, host port为:54321,进入侦听模式:
socket_server_test.png
代码运行起来之后,可以看到服务器这边可以检测到客户端的IP为192.168.0.102, 连接成功后,client会发送一个socket client test信息。
然后可以接收主机发送来的信息打印到串口,并且把收到的信息再回传给服务器。
测试结果如socket_client_test.mp4所示。
代码:evkbmimxrt1170_lwip_socket_client_freertos_cm7.7z
socket_client_test.zip (1.52 MB, 下载次数: 4)
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-4-10 22:38
  • 签到天数: 1335 天

    [LV.10]以坛为家III

    88

    主题

    4292

    帖子

    12

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    9049
    最后登录
    2024-4-13
    发表于 2023-7-17 17:01:08 | 显示全部楼层
    我也想做这个实验
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    8

    主题

    27

    帖子

    0

    注册会员

    Rank: 2

    积分
    134
    最后登录
    2024-1-31
    发表于 2023-11-1 15:25:28 | 显示全部楼层
    我也想做这个实验
    纽币呀,我的 rt1176 还没有玩转啊
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-28 04:43 , Processed in 0.108377 second(s), 21 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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