LWIP中基于UDP SOCKET组播功能的实现
2015-09-01 10:08
537 查看
/******************************************************* File name: MulticastUtility.c Description: 组播功能的实现 Author: 陈龙Jason Version: v1.0 ********************************************************/ #include "MulticastUtility.h" #include "igmp.h" struct udp_pcb *multicast_client_udp = NULL; /** * Function: multicastServerRecv * Description: 组播服务器接收到数据后的回调函数 * @param arg 回调时传递回来的参数 * @param pcb 当前连接的PCB * @param p 存放接收到数据的BUF * @param addr 发送数据的IP地址 * @param port 发送数据的端口号 **/ void multicastServerRecv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port){ printf("recv remote multicast data\n\r"); } /** * Function: createMulticastListen * Description: 创建组播监听端 **/ void createMulticastListen(){ struct udp_pcb *multicast_udp; ip_addr_t multicast_addr; err_t err_status; //IP4_ADDR(&multicast_addr,224,1,1,210); IP4_ADDR(&multicast_addr, 233, 233, 233, 233); multicast_udp = udp_new(); if( !multicast_udp){ printf("create multicast udp failed\n\r"); return; } err_status = udp_bind(multicast_udp,&multicast_addr,6666); if(err_status != ERR_OK){ printf("bind multicast udp failed\n\r"); return; } igmp_joingroup(IP_ADDR_ANY,&multicast_addr); igmp_joingroup(&veth_netif.ip_addr,&multicast_addr); udp_recv(multicast_udp,multicastServerRecv,NULL); } /** * Function: createMulticastListen * Description: 创建组播的客户端模式 **/ void createMulticastClient(){ int retValue = 0; err_t err_status; uint8_t i; struct pbuf *udp_data_packet; ip_addr_t ipaddr;//定义IP类型变量 udp_data_packet = pbuf_alloc(PBUF_RAW,20,PBUF_RAM); if(!udp_data_packet){ printf("serial udp memory allocate\n\r"); } IP4_ADDR(&ipaddr,233,233,233,233); if(multicast_client_udp == NULL){ multicast_client_udp = udp_new(); if( !multicast_client_udp){ printf("create udp pcb failed\n\r"); return; } /* 先绑定udp链接 */ err_status = udp_bind(multicast_client_udp,IP_ADDR_ANY,9675); //绑定任意地址和1233端口 if(err_status != ERR_OK){ //绑定失败 printf("serial client udp bind failed\n\r"); return ; } err_status = udp_connect(multicast_client_udp,&ipaddr,4002); //与远程NTP服务器建立连接 if(err_status != ERR_OK){ //创建连接失败 printf("serial client udp create connect failed\n\r"); return; } udp_recv(multicast_client_udp,multicastClientRecv,NULL); } memset(udp_data_packet->payload,0,udp_data_packet->len); memcpy(udp_data_packet->payload,"hello server",13); err_status = udp_send(multicast_client_udp,udp_data_packet); } /** * Function: multicastClientRecv * Description: 组播客户端接收到数据后的回调函数 * @param arg 回调时传递回来的参数 * @param pcb 当前连接的PCB * @param p 存放接收到数据的BUF * @param addr 发送数据的IP地址 * @param port 发送数据的端口号 **/ void multicastClientRecv(void *arg, struct udp_pcb *pcb, struct pbuf *p, ip_addr_t *addr, u16_t port){ printf("udp client recv data \n\r");//在函数体中添加具体功能 }
udp_bind():
相关文章推荐
- C# 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
- cocos2d-x学习笔记(1)
- 【iOS】彩色TabBar切换动画实现
- Jquery 获取 radio选中值
- android 如何内置SD卡中预制资源
- linux之cp/scp命令+scp命令详解(转)
- android国际化(多语言)
- [LeetCode#171]Excel Sheet Column Number
- 10个出色的NoSQL数据库
- php二维数组排序方法(array_multisort usort)
- 《Hadoop基础教程》之初识Hadoop
- Leetcode: Interleaving String
- 图片验证码
- 黑马程序员——39,IO(字节流)
- 小议:SharePoint Content Database Status: Read Only与Offline
- 2015 9月1日 工作计划与执行
- JAVA BST的实现
- makefile 中 $@ $^ %< 使用
- Objective-C常用方法总结
- Html动态添加/删除控件