day8-day9 网络编程拓展

广播:

数据包发送方式只有一个接受方,称为单播

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

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

广播地址:

一个网络内主机号全为1的IP地址为广播地址

发到该地址的数据包被所有的主机接收

255.255.255.255在所有网段中都代表广播地址

组播的实现:

在 IP多播数据报的目的地址需要写入多播组的标识符。

多播组的标识符就是IP 地址中的 D 类地址(多播地址)。

地址范围:224.0.0.1 ~ 239.255.255.255(中间除掉广播地址)

每一个 D类地址标志一个多播组。

多播地址只能用于目的地址,不能用于源地址‘

步骤

struct ip_mreqn {
    struct in_addr imr_multiaddr;  /*IP 组播组地址*/
    struct in_addr imr_address;   /*本地接口的IP地址*/
    int                   imr_ifindex;   /*本地网卡的编号*/
}
if(setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0){
perror("setsockopt");
exit(0);
}
struct ip_mreq {
    struct in_addr imr_multiaddr;  /*IP 组播组地址*/
    struct in_addr imr_interface;   /*本地接口的IP地址*/
}
if(setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0){
perror("setsockopt");
exit(0);
}

UNIX域套接字

struct sockaddr_un sun;
bzero (&sun, sizeof (sun));

sun.sun_family = AF_LOCAL;
/*确保UNIX_DOMAIN_FILE要先存在并且可写,不存在则退出 */
if( access(UNIX_DOMAIN_FILE, F_OK| W_OK) < 0){
   exit(1);
}
strncpy(sun.sun_path, UNIX_DOMAIN_FILE, strlen( UNIX_DOMAIN_FILE));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值