Linux 网络编程 广播/组播

广播 broadcast

  • 同时发给局域网中的所有主机,称为广播

  • 只有用户数据报(使用UDP协议)套接字才能广播

  • 广播地址

    192.168.1.0网段为例,最大的主机地址192.168.1.255代表该网段的广播地址
    发送到该地址的数据报被所有的主机接收
    
发送广播消息:
  1. socket(); 创建用户数据报UDP套接字
  2. struct sockaddr_in addr;
  3. setsockopt();//设置套接字属性,开广播权限
  4. sendto();//不开权限,ERROR!
接收广播消息:
  1. socket();
  2. struct sockaddr_in addr;
  3. bind(); "0"地址 或者 广播地址(只能收广播消息)
  4. recvfrom();
相关函数 setsockopt()

其他函数使用介绍可以看上一篇文章 – TCP/UDP

/* 获取/设置 套接字属性 */
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
int getsockopt(int sockfd, int level, int optname,
               void *optval, socklen_t *optlen);
int setsockopt(int sockfd, int level, int optname,
               const void *optval, socklen_t optlen);

参数:
    sockfd		套接字文件描述符
	level		属性设置表(选项级别) 例:SOL_SOCKET
				更多参加socket(7)	
	optname		选项名,例:SO_BROADCAST
				更多参见ip(7)
	optval		存放选项值的缓冲区的地址
    optlen		缓冲区长度

返回值:
    成功返回 0,失败返回 -1

组播 Multicast

  • 组播,多播。只有加入某个多播组的主机才能收到数据
  • 多播方式既可以发给多个主机,又能避免像广播那样带来过多的负载。

D类网络地址 – 组播地址

  • 不分网络地址和主机地址,第一字前4位固定1110
  • 224.0.0.1 - 239.255.255.255
组播发送:
  1. socket(); //创建用户数据报套接字
  2. struct sockaddr_in addr; //指定组播地址
  3. sendto(); //发送数据包
组播接收:
  1. socket(); 创建用户数据报套接字
  2. struct sockaddr_in addr;
  3. struct ip_mreqn mreq; // 组播地址 + “0”地址
  4. setsockopt(); //加入多播组
  5. bind(); //绑定ip地址和端口
  6. recvfrom();
相关函数

man 7 ip 查看man手册ip(7)

struct ip_mreqn
{
	struct in_addr imr_multiaddr; /* IP多播组地址 */
	struct in_addr imr_address; /* 本地接口的IP地址 */
	int imr_ifindex; /* 接口索引 ip_mreq 无该字段*/ 
};

//加入到多播组
setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreqn, sizeof(mreqn));
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
linux C语言 网络编程教程及源码 一、网络应用层编程 1、Linux网络编程01——网络协议入门 2、Linux网络编程02——无连接和面向连接的区别 3、Linux网络编程03——字节序和地址转换 4、Linux网络编程04——套接字 5、Linux网络编程05——C/S与B/S架构的区别 6、Linux网络编程06——UDP协议编程 7、Linux网络编程07——广播 8、Linux网络编程08——多 9、Linux网络编程09——TCP编程之客户端 10、Linux网络编程10——TCP编程之服务器 11、Linux网络编程11——tcp、udp迭代服务器 12、Linux网络编程12——tcp三次握手、四次挥手 13、Linux网络编程13——connect()、listen()和accept()三者之间的关系 14、Linux网络编程14——I/O复用之select详解 15、Linux网络编程15——I/O复用之poll详解 16、Linux网络编程16——I/O复用之epoll详解 17、Linux网络编程17——tcp并发服务器(多进程) 18、Linux网络编程18——tcp并发服务器(多线程) 19、Linux网络编程——tcp高效并发服务器(select实现) 20、Linux网络编程——tcp高效并发服务器(poll实现) 21、Linux网络编程——tcp高效并发服务器(epoll实现) 二、网络底层编程(黑客模式) 1、Linux网络编程1——啥叫原始套接字 2、Linux网络编程2——原始套接字编程 3、Linux网络编程3——原始套接字实例:MAC头分析 4、Linux网络编程4——原始套接字实例:MAC地址扫描器 5、Linux网络编程5——IP数据报格式详解 6、Linux网络编程6——TCP、UDP数据包格式详解 7、Linux网络编程7——原始套接字实例:发送UDP数据包 8、Linux网络编程8——libpcap详解 9、Linux网络编程9——libnet详解

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值