Qt自动获取本机IP与TCP客户端绑定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;
    }

 

  • 10
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中,可以使用QNetworkInterface类来获取本地网络接口信息,并使用QAbstractSocket类的bind方法来绑定指定的IP地址。 以下是一个简单的示例代码,展示如何在Qt中创建一个TCP客户端绑定指定的IP地址: ```cpp #include <QtNetwork> QTcpSocket socket; QHostAddress hostAddress("127.0.0.1"); // 服务器IP地址 QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces(); // 获取所有网络接口信息 // 查找指定接口名的网络接口信息 QNetworkInterface interface; foreach(QNetworkInterface netInterface, interfaces) { if (netInterface.name() == "eth0") { // 替换为需要绑定的接口名 interface = netInterface; break; } } // 绑定指定IP地址 if (!interface.addressEntries().isEmpty()) { QNetworkAddressEntry entry = interface.addressEntries().first(); socket.bind(entry.ip()); } // 连接服务器 socket.connectToHost(hostAddress, 1234); // 替换为服务器端口号 ``` 在上面的示例代码中,我们首先获取所有网络接口信息,然后查找指定名称的网络接口信息。接下来,我们从接口信息中获取第一个IP地址,并使用QAbstractSocket类的bind方法来将该地址绑定TCP客户端上。最后,我们使用QAbstractSocket类的connectToHost方法连接到指定的服务器IP地址和端口号。 请注意,如果您要在绑定IP地址之前连接到服务器,则必须将bind方法替换为以下代码: ```cpp socket.bind(QHostAddress::Any); ``` 这将使TCP客户端绑定到任何可用的本地IP地址。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值