Qt网络编程--主机信息

为了编写一个类似QQ的聊天程序,学习了一下网络编程。在Qt的帮助手册中可以看到Qt NetWorkProgramming 模块,里面有介绍和一些例程。我从这些例程中慢慢摸索,慢慢学习了一些网络编程的知识,总结一下吧。

       QT network 中有很多模块,介绍一下:

       QNetworkInterface:

                                   这是一个网络接口类,可以获得网络接口的信息(物理地址,ip地址,接口名字等),它有个flag属性,用于标识这些地址的类型、功能,比如组播,广播,活动的,点对点,回环,等等。 这些属性可以或,很多Qt的属性都可以或。
            

       QNetworkAddressEntry:

                                  上面的接口类可以获得 这个类的对象,这个类包含了IP,广播地址,子网掩码 一定要由上面的接口类调用函数获得的这个类的对象才有用,以前我就以为天真的以为直接可以获得,实际上这个类就是数据封装。

              

        QHostAddress  :

                                这是一个主机地址类,介绍一个函数:  QPair<QHostAddress, int> QHostAddress::parseSubnet(const QString & subnet)
                                这个函数可以由     IP地址+子网掩码 计算出网络号和所占的位数,结果封装成QPair.
                               
                               这里说一下网络号和子网掩码:因特网的IP地址都是唯一的,但是这么多电脑,怎么够用。。所以一般在公共网络里的电脑,像学校啊,单位什么的,都是有局域网的。所以你用的地址叫做本地连接。。一个大型的局域网里面 还会有 局域网,每个网络都会有一个网络号,网络中的每台主机都会有一个主机号,IP地址是由网络号+主机号计算出来的。子网掩码+IP地址可以计算出网络号和主机号。所以广播地址也会变。。而且在两个不同网络中的主机一般是无法直接通信的。。

       QHostInfo :

                       看名字就知道了,这是一个主机信息类,可以获得网络中的主机信息
                 
                  下面贴一段代码,这个可以获得 本地连接的 IP地址(实际上电脑中可能会有很多地址的)
        
address = QHostAddress::LocalHost;
   foreach(QNetworkInterface interface,QNetworkInterface::allInterfaces()){
       bool hasGetAdress = false;
       if(interface.humanReadableName()!="本地连接") continue;
       foreach(QNetworkAddressEntry entry,interface.addressEntries()){
           if(entry.ip().protocol() == QAbstractSocket::IPv4Protocol){
                    address = entry.ip();
                    hasGetAdress = true;
                    break;
           }
       }
       if(hasGetAdress) break;
   }


              

                               


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值