LanNeighborHostManager基于Qt中的QHostInfo查找局域网中的可用主机。 启动界面如下所示: 启动界面 选中左侧网口对应IP地址刷新后,可更新主机状态。 搜索过程中界面 动态效果如下所示: 视频加载中。。。 从Qt源码中可以得知,QHostInfo查找局域网主机存在两种方式:多线程方式,单线程方式。 多线程单线程源码 采用多线程方式的情况下,默认同时可以搜寻20个主机,待有搜寻完毕后,有新的主机会加入搜索(如果队列中还存在未搜索主机)。 最大线程数 gethostname()是协议相关的,只能用于IPv4,原因在于:gethostname()函数不论是Windows系统,或是基于Linux内核的系统,实际上是基于ARP协议获取局域网内远程主机的主机信息。而ARP协议是IPv4中必不可少的协议,但在IPv6中该协议将不再存在,取而代之的是NDP协议。 以下通过Wireshark抓包看看。 ARP(AddressResolutionProtocol),即地址解析协议,是根据IP地址获取对应物理地址的一个TCPIP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网中的所有主机,根据返回消息确定目标的物理地址;收到返回消息后,将IP地址和对应的物理地址存入本机ARP缓存并保留一定的生存周期,下次请求时直接查询ARP缓存以节约资源。 ARP协议广播request帧: ARP请求帧 ARP协议reply帧: ARP回复帧 回复的数据包中包含了IP所在主机的MAC地址,收到该ARP广播帧的主机都将用该MAC地址对本机ARP缓存进行刷新。