45黑马QT笔记之Qt下的Udp的广播和组播
1 广播:
在使用QUdpSocket类的writeDatagram()函数发送数据的时候,其中第二个参数host应该指定为广播地址:QHostAddress::Broadcast此设置相当于QHostAddress(“255.255.255.255”)。255.255.255.255在所有网段都属于广播地址,是当前子网的广播地址。例如在UDP的例子中,我们在输入对方ip时输入255.255.255.255就是相当于广播,在该子网(局域网)的主机都会被发送,应用程序能不能接收到就看你的端口号。(局域网的最大主机数由子网掩码决定)
使用UDP广播的的特点:
1)使用UDP进行广播,局域网内的其他的UDP用户全部可以收到广播的消息。
2)UDP广播只能在局域网范围内使用。
假设我们每次都用广播,当前子网(局域网)的用户都要接收,这就容易造成网络拥堵和资源浪费,能不能只有几个人的广播呢?所以组播这出现了。
2 组播:
我们再使用广播发送消息的时候会发送给所有用户,但是有些用户是不想接受消息的,这时候我们就应该使用组播,接收方只有先注册到组播地址中才能收到组播消息,否则则接受不到消息。另外组播是可以在Internet中使用的。
在使用QUdpSocket类的writeDatagram()函数发送数据的时候,其中第二个参数host应该指定为组播地址,关于组播地址的分类(一定是D类IP地址):
1)224.0.0.0~224.0.0.255为预留的组播地址(永久组地址),地址224.0.0.0保留不做分配,其它地址供路由协议使用;
2)224.0.1.0~224.0.1.255是公用组播地址,可以用于Internet;
3)224.0.2.0~238.255.255.255为用户可用的组播地址(临时组地址),全网范围内有效;
4)239.0.0.0~239.255.255.255为本地管理组播地址,仅在特定的本地范围内有效。
注册加入到组播地址需要使用QUdpSocket类的成员函数:
bool joinMulticastGroup(const QHostAddress &groupAddress)
3 总结广播和组播的测试:
1) 广播:
测试广播只需要在正常的UDP通信中,在writeDatagram()的参2输入广播地址即可,这里用的是255.255.255.255。(广播地址的分类自己去找资料了解)
下面可以看到,广播时,同一局域网内的主机都会收到消息,应用程序能不能接收到就看你的端口号。(我的电脑的两个用户,肯定在同一局域网嘛。)
2)组播:
测试组播同样在正常的UDP通信中,只需要增加一语句,用来注册某个D类ip地址加入组播(即用joinMulticastGroup参1注册,该参为D类中的组播地址),然后通过窗口的行编辑赋给writeDatagram的参数2来进行组播通信即可。只不过绑定时要多写IPv4协议。不注册的组播地址是无法通信的。
下面是没有加入组播ip地址224.0.0.2时,两个窗口是无法在该组播地址通信的。
注册组播地址224.0.0.2后,两个窗口是可以在该组播地址互相通信。端口6666的收到8888发来的消息,当然8888也可以收到6666发送的消息。