企业单页网站模板如何搭建公司网络
广播与组播:
广播:
局域网,一个人发所有人都能收(服务器找客户端),(发给路由器的广播地址后后路由器自动给所有人发,可用于服务器找客户端)
 只能udp来做
setsocketopt:
int setsockopt(SOCKET s, int level, int optname,
         const char FAR *optval, int optlen);
         
 sock:将要被设置或者获取选项的套接字。
level:选项所在的协议层。
 level指定控制套接字的层次.可以取三种值:
 1)SOL_SOCKET:通用套接字选项.
 2)IPPROTO_IP:IP选项.
 3)IPPROTO_TCP:TCP选项. 
optname:需要访问的选项名。
 参数很多,不一一列举,主要使用SO_BROADCAST 广播(只能选用UDP,使用TCP时没反应)
optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。
 (一般置1打开,0关闭)(需要int on)
optlen:现选项的长度(sizeof(on))
返回值:
 成功执行时,返回0。失败返回-1,errno被设为以下的某个值
 EBADF:sock不是有效的文件描述词
 EFAULT:optval指向的内存并非有效的进程空间
 EINVAL:在调用setsockopt()时,optlen无效
 ENOPROTOOPT:指定的协议层不能识别选项
 ENOTSOCK:sock描述的不是套接字
 发送方:(发给路由器看)
 广播地址:1.255.255.255.255
           2.本机最后一位最大的IP地址(连接到局域网后,前三段是一样的,
           最后一位一般为255)
步骤--》1.开广播开关(setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));   )
               2.发给广播地址(sendto(sockfd,buf,strlen(buf),0,(SA)&all,sizeof(all)))
接收方:
1.bind接口地址
 2.recv接收即可
  
组播:
接收方:
 setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
 bind端口
 recv接收即可  
接收方:
 setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&on,sizeof(on));
 bind端口
 recv接收即可
 需要选定一个组播地址
 D类:    组播和广播
         224.0.0.0 - 239.255.255.255
         192.168.0.255 - 255.255.255.255
         235.1.2.3
         192.168.1.0 
         192.168.0.1   网关
         192.168.1.255 广播 
         
 组播地址结构体:
 struct ip_mreqn {
                struct in_addr imr_multiaddr; /* 组播地址 */
                struct in_addr imr_address;   /* 本机IP地址 */(可写INADDR_ANY(值为0.0.0.0),
                                                                 代表监听本机所有端口,
                                                                 一般用来表示本机地址)
                int            imr_ifindex;   /* 接口索引 */(网卡,例如ens33,
                                                             可写0,代表任意一块网卡)
            };
发送方
2.发给组播地址即可
接收方:
1.bind组播接口地址
2.利用组播地址结构体将本机关联进组播地址
struct ip_mreqn multiaddr;multiaddr.imr_multiaddr.s_addr = inet_addr(MUTIL_ADDR);multiaddr.imr_address.s_addr = INADDR_ANY; 
3.开开关:setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, 
 &multiaddr,sizeof(multiaddr));  //第二个参数选择ip选项,IP_ADD_MEMBERSHIP加入组播组
4.接收:recvfrom(sockfd, buf, sizeof(buf), 0, (SA)&sendaddr, &len);
