【朝花夕拾】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服务器地址,端口,以及发送信息。 - #define INIT_THREAD_STACKSIZE 1024
- /*! @brief Priority of the temporary lwIP initialization thread. */
- #define INIT_THREAD_PRIO DEFAULT_THREAD_PRIO
- #define HOST_NAME "192.168.0.100"
- #define BUF_LEN 100
- uint8_t senddata[]= "Socket client test";
- #define PORT 54321
- #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); 线程函数如下: - static void socketclient_thread(void *arg)
- {
- int sock = -1,rece;
- struct sockaddr_in client_addr;
- char* host_ip;
- ip4_addr_t dns_ip;
- err_t err;
- uint32_t *pSDRAM= pvPortMalloc(BUF_LEN);//
- host_ip = HOST_NAME ;
- PRINTF("host name : %s , host_ip : %s\r\n",HOST_NAME,host_ip);
- // while(1)
- // {
- PRINTF("Start server Connect !\r\n");
- // create connection
- sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock < 0)
- {
- PRINTF("Socket error\n");
- vTaskDelay(10);
- // continue;
- }
- client_addr.sin_family = AF_INET;
- client_addr.sin_port = htons(PORT);
- client_addr.sin_addr.s_addr = inet_addr(host_ip);
- memset(&(client_addr.sin_zero), 0, sizeof(client_addr.sin_zero));
- if (connect(sock, (struct sockaddr *)&client_addr, sizeof(struct sockaddr)) == -1)
- {
- PRINTF("Connect failed!\r\n");
- closesocket(sock);
- vTaskDelay(10);
- // continue;
- }
- PRINTF("Connect to server successful!\r\n");
- // PRINTF("\r\n************************************************************\n\r");
- // PRINTF("\r\n Begin write\n\r");
- write(sock,senddata,sizeof(senddata));
- while (1)
- {
- //receive data
- rece = recv(sock, (uint8_t*)pSDRAM, BUF_LEN, 0);//BUF_LEN
- if (rece <= 0)
- break;
- PRINTF("recv %d len data\r\n",rece);
- PRINTF("%.*s\r\n",rece,(uint8_t*)pSDRAM);
- write(sock,pSDRAM,rece);
- }
- //rec data process
- memset(pSDRAM,0,BUF_LEN);
- closesocket(sock);
- vTaskDelay(10000);//about 10s //10000
- // }
- }
复制代码
三,测试结果 首先使用电脑配置以太网IP为服务器IP: 192.168.0.100 配置好之后,结合测试软件USR-TCP232-Test, 配置成 TCP server,local IP为:192.168.0.100, host port为:54321,进入侦听模式: 代码运行起来之后,可以看到服务器这边可以检测到客户端的IP为192.168.0.102, 连接成功后,client会发送一个socket client test信息。 然后可以接收主机发送来的信息打印到串口,并且把收到的信息再回传给服务器。 测试结果如socket_client_test.mp4所示。 代码:evkbmimxrt1170_lwip_socket_client_freertos_cm7.7z |