【1】网络属性
man getsockopt man 3 getsockopt 更新man手册 sudo apt-get install manpages-de manpages-de-dev manpages-dev glibc-doc manpages-posix-dev manpages-posix
功能:获取和设置网络属性; 头文件: #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); int a = 1; setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &a, sizeof(a)); 参数: int sockfd:指定要设置/获取属性的套接字; int level:指定要控制套接字的层次; SOL_SOCKET 应用层,通用套接字选项; man 7 socket IPPROTO_TCP: TCP选项 man 7 tcp IPPROTO_UDP: UDP选项; man 7 udp IPPROTO_IP: IP选项; man 7 ip int optname:指定控制方式; 以下以 SOL_SOCEKT为例:man 7 socket SO_REUSEADDR:允许端口快速重用 SO_RCVBUF:接收缓冲区大小; SO_SNDBUF:发送缓冲区大小; SO_BROADCAST:广播; void *optval:根据optname的不同,数据类型不同; socklen_t* optlen:optval指向的变量的大小; 返回值: 成功,返回0; 失败,返回-1,更新errno;
【2】多点通讯
1. 单播
-
注意之间一对一的通信,交换机和路由器对数据只做转发不做复制;
-
每次只有两个实体相互通讯,发送端和接收端都是唯一确定的。
2. 广播
1)概念
-
主机之间一对多的通信方式,网络对其中每一台主机发出的信息都进行无条件复制并转发;
-
所有主机都可以接收到所有信息,无论你是否需要,由于其不用路径选择,所以其网络成本比较低;
-
禁止广播数据穿过路由器,防止广播数据造成大面积影响
-
只有UDP才能广播
-
广播的地址:主机号全是1
192.168.1.41那么他的广播地址192.168.1.255;
255.255.255.255 给所有网段中的所有主机发送广播,但是由于广播数据不能穿过路由器,所以实际上是给当前局域网下的主机发送;
2)广播的发送端流程(类似客户端)
-
创建报式套接字 (socket)
-
可选择绑定也可以不绑定地址信息结构体 (bind)
-
设置网络属性:允许广播,如果不设置,默认是不允许的(setsockopt)
-
填充广播的地址信息结构体:端口号 IP地址(广播IP 例如192.168.1.255 255.255.255.255)
-
发送数据 (sendto)
3)广播的接收端流程(类似服务器)
-
创建报式套接字 (socket)