自动获取本机IP与客户端绑定IP和端口 - Qt学习

       客户端使用特定的端口号与服务器进行通信,这是在进行网络编程开发时候经常容易遇到的问题。这篇博客是关于网络编程中客户端编写的小总结。

绑定端口号

       在Qt的Socket开发中,有丰富的函数可以调用,要实现客户端绑定指定的端口,只需要在创建Socket之后,调用bind(port)函数进行端口的绑定即可。

绑定IP和端口

       直接调用QHostAddress构造函数产生一个IP地址,调用bind()函数的另一个重载函数bind(IP,port)进行IP和端口的绑定。为了调试与上网工作两不误,这里有一个小技巧,将电脑网卡配置为多IP,客户对调试的IP进行绑定,同时不影响主IP的正常使用,可以参照我的博客“Windows同时使用两个IP上网”。截取部分代码如下

        QHostAddress localIP = QHostAddress("30.252.22.10");
        IP = IPaddrLineEdit->text();
        port = portLineEdit->text().toInt();
        clientSocket->abort();
        if(clientSocket->bind(localIP,42005))
        {
            qDebug() << "1 LocalHost:" << localIP.toString();
            qDebug() << "2 localPort:" << clientSocket->localPort();
        }
        clientSocket->connectToHost(IP,port);

自动搜索本机IP

       获取本机所有IP,QNetworkInterface类中提供了一个便利的静态函数allAddresses(),用于返回一个QHostAddress主机地址列表。参考自https://blog.csdn.net/liang19890820/article/details/52273986。下面是获取本地IPv4的代码实现

    QList<QHostAddress> list = QNetworkInterface::allAddresses();
    foreach (QHostAddress address, list)
    {
        if(address.protocol() == QAbstractSocket::IPv4Protocol)
        {
            if(address.toString().contains("127.0.")) continue;

             qDebug() << "Address : " << address.toString();
        }
        else if (address.isNull())  // 主机地址为空
            continue;
    }

猜你喜欢

转载自blog.csdn.net/yishuicanhong/article/details/80603674
今日推荐