linux组播通讯
来源:互联网 发布:海康 知乎 编辑:程序博客网 时间:2024/04/27 01:15
/************linux 组播发送端**********/
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdlib.h>
int main(void)
{
int sockfd;
struct sockaddr_in baddr;
int addr_len=sizeof(baddr);
char buf[100];
bzero(&baddr,sizeof(baddr));
baddr.sin_family=AF_INET;
baddr.sin_port=htons(9000);
/**************D类广播地址不用bind函数*****************/
/**************并且广播地址已经表明了是*************g广播性质所以不需要setsockopt函数/
baddr.sin_addr.s_addr=inet_addr("224.10.10.10");
if((sockfd= socket(AF_INET,SOCK_DGRAM,0))<0)
{
perror("socket:");
exit(-1);
}
//bind(sockfd,(struct sockaddr*)&baddr,&addr_len);
//int on=1;
// setsockopt(sockfd,IPPROTO_IP,ADD_MEMBERSHIP,&on,sizeof(on));
while(1)
{
fgets(buf,10,stdin);
sendto(sockfd,buf,10,0,(struct sockaddr*)&baddr,sizeof(baddr));
}
}
/************linux 组播接收端**********/
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <netinet/in.h>
#include <strings.h>
#include <stdlib.h>
int main(void)
{
int sockfd;
struct sockaddr_in baddr;
struct sockaddr_in sendr;
int addr_len=sizeof(baddr);
char buf[100];
/************************************/
struct ip_mreq
{
/*********组播地址************************/
struct in_addr imr_multiaddr;
/**********本地IP**************************/
struct in_addr imr_interface;
};
/******D类IP地址:组类广播地址********************/
struct ip_mreq mreq;
bzero(&mreq,sizeof(mreq));
/*********组播地址通讯IP初始化***********发送端和接受端必须一致********/
mreq.imr_multiaddr.s_addr=inet_addr("224.10.10.10");
/***************本地组播通讯IP***********INADDR_ANY=0*****************************/
/****************htonl(INADDR_ANY)等价于*htonl(0)***********************/
mreq.imr_interface.s_addr=htonl(INADDR_ANY);
if((sockfd= socket(AF_INET,SOCK_DGRAM,0))<0)
{
perror("socket:");
exit(-1);
}
/***************sockfd 加入播组*********************************/
int on=1;
setsockopt(sockfd,IPPROTO_IP,IP_ADD_MEMBERSHIP,&mreq,sizeof(mreq));
/******************初始化本地通讯*****IP 端口 类型***********/
bzero(&baddr,sizeof(baddr));
/************************************************/
baddr.sin_family=AF_INET;
/**************************通讯端口必须和发送端一致**********************/
baddr.sin_port=htons(9000);
/*********************************可以用通讯播组IP也可以用**0.0.0.0********/
baddr.sin_addr.s_addr=inet_addr("224.10.10.10");//0.0.0.0
/******************绑定通讯端口******************************/
bind(sockfd,(struct sockaddr*)&baddr,addr_len);
// int on=1;
//setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
while(1)
{
//fgets(buf,10,stdin);
recvfrom(sockfd,buf,10,0,(struct sockaddr*)&sendr,&addr_len);
printf("%d\n",ntohs(sendr.sin_port));
}
}
- linux组播通讯
- ZigBee组播通讯
- 网络中的三种通讯模式:单播、广播、组播(多播)
- linux组播通信
- Linux组播编程
- linux网络-组播
- Linux 多播(组播)例程
- Linux 多播(组播)例程
- Linux 多播(组播)例程
- 【Linux网络编程】多播、组播
- UDP通讯接收案例(组播方式)
- 单播/组播/广播 通讯协议的特点及应用对比
- 单播/组播/广播 通讯协议的特点及应用对比
- 单播/组播/广播 通讯协议的特点及应用对比
- 单播/组播/广播 通讯协议的特点及应用对比
- 单播/组播/广播 通讯协议的特点及应用对比
- 计算机网络的三种通讯模式(单播,广播,组播)小结
- linux 组播接收注意事项
- Intellij_IDEA-7.0.5下载说明
- KMP算法学习总结
- SDL编程学习网站
- 2个DIV制作十字架
- jquery+html5 3--鼠标和键盘控制
- linux组播通讯
- c static 问题
- Android培训班(105)start_kernel函数2
- 黑马程序员--面向对象(三)
- windows下使用WinPcap获取网卡列表
- javascript传递多个参数
- 如何使用GDAL进行图像镶嵌
- 做一名合格的前端开发工程师---各浏览器对页面外部资源加载的策略
- 怎样用鼠标选中三维空间中的一个顶点