localhost、127.0.0.1对网络编程造成不通的说明

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

平时大家都有过网络编程的经验,一般地,我们为了方便经常用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,而网

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值