Linux编程4.11 网络编程-广播

本文介绍了套接字选项在编程中的作用,重点讲解了SO_BROADCAST选项用于控制UDP套接字发送广播数据的能力,以及SO_SNDBUF和SO_RCVBUF选项对发送和接收缓冲区的影响。同时,详细解释了广播地址的不同类别及其在网络通信中的角色。
摘要由CSDN通过智能技术生成

广播实现一对多的通讯
它通过向广播地址发送数据报文实现的

1、套接字选项

套接字选项用于修饰套接字以及其底层通讯协议的各种行为。函数setsockoptgetsockopt可以查看和设置套接字的各种选项。

 #include <sys/types.h>     
 #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);
//成功后,返回0。出现错误时,返回-1

2、SO_BROADCAST选项

控制着UDP套接字是否能够发送广播数据报,选项的数据类型为int,非零意味着“是”,注意,只有UDP套接字可以使用这个选项,TCP是不能使用广播的。

int opt=1;
if(sockfd=socket(AF_INET,SOCK_DGRAM,0)<0)
{
	//错误处理
}

if(setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&opt,sizeof(opt))<0)
{
	//错误处理
}

3、SO_SNDBUF和SO_RCVBUF选项

每一个套接字有一个发送缓冲区和接收缓冲区,这两个缓冲区由底层协议使用,接收缓冲区存放由协议接收的数据直到应用程序读走,发送缓冲区存放应用写出的数据直到被协议发送出去。SO_SNDBUFSO_RCVBUF选项分别控制发送和接收缓冲区的大小,它们的类型均为int,以字节为单位。

int opt=1;
if(sockfd=socket(AF_INET,SOCK_STREAM,0)<0)
{
	//错误处理
}

if(getsockopt(sockfd,SOL_SOCKET,SO_SUDBUF,&opt,sizeof(opt))<0)
{
	//错误处理
}
opt+=2048;
if(setsockopt(sockfd,SOL_SOCKET,SO_SUDBUF,&opt,sizeof(opt))<0)
{
	//错误处理
}

在这里插入图片描述

4、广播地址

如果用{net ID,subnet ID,host ID}({网络ID,子网ID,主机ID})表示IPV4地址,那么有四类的广播地址,我们用-1表示所有比特都为1的字段
子网广播地址:{net ID,subnetID,-1}.。这类地址编排指定子网上的所有接口。例如,如果我们对B类地址192.168采用8位子网ID,那么192.168.2.255将是192.168.2子网上所有接口子网广播地址。路由器通常不转发这类广播。
全部子网广播地址:{netID,-1,-1}。这类广播地址编排指定网络上的所有子网。如果说这类地址曾被用过的话,那么现存已很少见了。
受限广播地址:{-1,-1,-1}或255.255.255.255.路由器从不转发目的地址255.255.255.255.的IP数据报。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值