用于网络设备的管理的类是 NetworkManager
类结构如下图
我们使用的是他的子类 : BasicNetworkManager
BasicNetworkManager中一些重要的属性和方法:
-
thread_:Thread : BasicNetworkManager工作在哪个线程
-
network_monitor : 用于监控网络设备的变化,发现变化之后需要做出相应的处理
-
CreateNetworks() : 查找系统中都包括哪些网络设备, 例如设备中有两块硬件网卡,则通过该方法即可获取两个网卡的设备信息
-
QueryDefaultLocalAddress() : 用于获取本地socket绑定的IP地址和端口号
-
StartNetworkMonitor() : 启动网络设备的额监控器
BasicNetworkManager 继承自三个类:
- sigslot:has_slots : 支持信号发送
- MessageHandler : 支持消息处理
- NetworkManagerBase : 解释如下
NetworkManagerBase 中的属性和方法:
-
networks_ : 一个列表,遍历出的网卡信息都会保存在这里
-
ipv4_any_address_network_ : 默认使用的ipv4的网卡信息, ipv6同理
-
default_local_ipv4_address_ : 默认ipv4的地址, ipv6同理
-
MergeNetworkList() : 合并网卡信息, 将可以合并的网卡信息进行合并, 从而减少一部分的数据操作
NetworkManagerBase继承自NetworkManager
NetworkManager继承自:
-
DefaultLocalAddressProvider : 获取本地地址
-
MdnsResponderProvider : MDNS技术隐藏IP地址 防止泄漏
创建NetworkManager的过程
-
PeerConnection::SetLocalDescription
-
PeerConnection::DoSetLocalDescription
-
JsepTransportController::MaybeStartGathering : 收集本地的candidate
-
// 从主线程 切换到 工作线程
-
JsepTransportController::MaybeStartGathering
-
P2PTransportChannel::MaybeStartGathering
-
PortAllocator::CreateSession
-
BasicPortAllocator::CreateSessionInternal
-
BasicPortAllocatorSession::BasicPortAllocatorSession
-
BasicNetworkManager::StartUpdating 发送kUpdateNetworkMessage消息
-
BasicNetworkManager::OnMessage , 当收取到的消息是要获取本机的网卡信息时, 就会继续执行下面的步骤
-
BasicNetworkManager::UpdateNetworkContinually
-
BasicNetworkManager::UpdateNetworkOnce
-
BasicNetworkManager::CreateNetworks