1 /*
2  * Copyright (C) 2015-2021 Alibaba Group Holding Limited
3  */
4 #include <stdio.h>
5 #include <lwip/sockets.h>
6 #if AOS_COMP_CLI
7 #include "aos/cli.h"
8 #endif
9 
10 #define PORT       6666
11 #define BUFSIZE    128
12 
udp_server_task(void * data)13 static void udp_server_task(void *data)
14 {
15     char    buf[BUFSIZE+1];
16     int     sockfd;
17     struct  sockaddr_in svraddr = {0};
18 
19     sockfd = lwip_socket(AF_INET,SOCK_DGRAM,0);
20 
21     if (sockfd < 0) {
22         return;
23     }
24 
25     svraddr.sin_family=AF_INET;
26     svraddr.sin_port=htons(PORT);
27     inet_aton("127.0.0.1",&svraddr.sin_addr);
28 
29     int ret=lwip_bind(sockfd,(struct sockaddr*)&svraddr,sizeof(svraddr));
30     if (ret<0) {
31         printf("cannot bind!\r\n");
32         close(sockfd);
33         return;
34     }
35 
36     while(1)
37     {
38         struct sockaddr_in cli;
39         int len = sizeof(cli);
40         int recv_len = lwip_recvfrom(sockfd, buf, BUFSIZE, 0, (struct sockaddr*)&cli, &len);
41 
42         if (recv_len > 0) {
43             buf[recv_len]='\0';
44             printf("recv: %s\r\n",buf);
45         }
46     }
47 
48     lwip_close(sockfd);
49 }
50 
udp_client_task(void * data)51 static void udp_client_task(void *data)
52 {
53     char *buf = "hello UDP";
54     int sockfd=lwip_socket(AF_INET,SOCK_DGRAM,0);
55     struct sockaddr_in svraddr;
56     int len = 0;
57 
58     if (sockfd < 0) {
59         return;
60     }
61 
62     svraddr.sin_family=AF_INET;
63     svraddr.sin_port=htons(PORT);
64     inet_aton("127.0.0.1",&svraddr.sin_addr);
65 
66     while(1) {
67         aos_msleep(1000);
68 
69         len = lwip_sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&svraddr,sizeof(svraddr));
70         if (len < strlen(buf)) {
71             break;
72         }
73     }
74 
75     lwip_close(sockfd);
76 }
77 
udp_example(int argc,char ** argv)78 static void udp_example(int argc, char **argv)
79 {
80     aos_task_new("udp_server", udp_server_task, NULL, 6 << 10);
81 
82     aos_task_new("udp_client", udp_client_task, NULL, 6 << 10);
83 }
84 
85 #if AOS_COMP_CLI
86 /* reg args: fun, cmd, description*/
87 ALIOS_CLI_CMD_REGISTER(udp_example, test_udp, udp_example)
88 #endif
89