平时大家都有过网络编程的经验,一般地,我们为了方便经常用localhost或者127.0.0.1,代替本机IP地址,如下为Qt编写的一段网络应用程序的代码:
m_UdpSocket = new QUdpSocket(this);
m_UdpSocket->bind(QHostAddress(“127.0.0.1”),8888);
connect(&m_UdpSocket, &QUdpSocket::readyRead, this, &CCmdProcess::readPendingDatagrams);
或者
m_UdpSocket = new QUdpSocket(this);
m_UdpSocket->bind(HostAddress(QHostAddress::LocalHost),8888);
connect(&m_UdpSocket, &QUdpSocket::readyRead, this, &CCmdProcess::readPendingDatagrams);
上述两段代码当本机只有一个网卡时,当网络程序的远端来连接本端时,QUdpSocket类的readyRead信号确实能激发,本端程序确实能进入相应的readPendingDatagrams槽函数。
但是当本机有多张网卡时,上述代码不一定起作用,也就是说QUdpSocket类的readyRead信号有时不能被激发,本端程序有时不能进入相应的readPendingDatagrams槽函数。这是因为:
当本机有多个网卡(为了便于后文描述,暂且以两个网卡为例,称为网卡A,网卡B。A网卡在局域网的地址暂且称为192.168.1.101,B网卡在局域网的地址暂且称为192.168.1.102)时,QHostAddress::LocalHost有可能绑定的是A网卡,也即QHostAddress::LocalHost此时指示的IP可能是192.168.1.101;也有可能绑定的是B网卡也即QHostAddress::LocalHost此时指示的IP可能是192.168.1.102,而网

本文探讨了使用Qt进行网络编程时,绑定IP地址的具体细节。特别是针对多网卡环境,详细解释了为什么不应使用localhost或127.0.0.1,而是应该指定静态IP地址,并给出了具体的代码示例。
最低0.47元/天 解锁文章
645

被折叠的 条评论
为什么被折叠?



