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