void udpclient(int argc, char **argv)

{

int myFd, clientFd;

struct sockaddr_in myAddr, clientAddr;

struct ip_mreq mreq;

int addrlen = sizeof(clientAddr);

char buf[MAXBUF];

char addrTemp[INET_ADDRSTRLEN];

int db_Value=0;

int i,fd_pipe_w;

rt_memset(&myAddr, 0,sizeof(myAddr));

rt_memset(&clientAddr, 0,sizeof(clientAddr));

//创建套接字,datagrams

if((myFd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {

}

//设置本地地址端口信息

myAddr.sin_family = AF_INET;

myAddr.sin_addr.s_addr = INADDR_ANY;

if (argc == 3) {

myAddr.sin_port = htons(atoi(argv[2]));

} else {

myAddr.sin_port = htons(PORT);

}

//绑定本地套接字

if(bind(myFd, (struct sockaddr *)&myAddr, sizeof(myAddr)) != 0) {

}

//设置IP_MULTICAST_LOOP

unsigned char loop = 1;

if (setsockopt(myFd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) != 0) {

return ;

}

//设置IP_MULTICAST_TTL 为1,即该多播最多只能经过一个路由器

unsigned char ttl = 1;

if (setsockopt(myFd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)) != 0) {

return ;

}

//对struct ip_mreq这个结构体赋值

if (argc > 1) { //设置IP地址

int res;

if ((res = inet_pton(AF_INET, argv[1], &mreq.imr_multiaddr)) == -1) {

exit(errno);

} else if(res == 0) {

rt_kprintf("IP地址无效\n");

rt_kprintf("请输入一个多播地址:224.0.0.1 ~ 239.255.255.255\n");

return ;

}

} else {

rt_kprintf("Usage:%s 多播地址(224.0.0.1 ~ 239.255.255.255)\n", argv[0]);

return ;

}

mreq.imr_interface.s_addr = INADDR_ANY;

//将本机加入多播组中

if (setsockopt (myFd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) != 0) {

exit(errno);

}

rt_kprintf("Multicast is starting,waitting for information of Multicast.....\n");

while (1)

{

rt_memset(buf, 0,sizeof(buf));

rt_kprintf("wait UDP data\r\n");

if (recvfrom(myFd, buf, sizeof(buf) - 1, 0, (struct sockaddr *)&clientAddr, &addrlen) == -1)

{

return ;

}

rt_kprintf(".......\r\n");

/* 线程休眠一段时间 */

rt_thread_delay(50);

}

//退出广播组

if (setsockopt (myFd, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)) != 0) {

exit(errno);

}

return;

}

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐