平时大家都有过网络编程的经验,一般地,我们为了方便经常用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,而网络上的远端程序在编程时,肯定得将网络通信的对端(本例指本端)的IP写死才行,否则无法编程。而本端绑定的IP为QHostAddress::LocalHost或127.0.0.1可能是192.168.1.102或192.168.1.101,这样不确定的IP会导致网络连接不通。正确的做法是:在本端不要用QHostAddress::LocalHost或127.0.0.1,而是写一个确定的、在局域网中设置的静态IP就行,即代码像下面那样:

m_UdpSocket = new QUdpSocket(this);// 不用要localhost,用静态的IP,绑定到A网卡
m_UdpSocket->bind(HostAddress(“192.168.1.101”),8888);
connect(&m_UdpSocket, &QUdpSocket::readyRead, this, &CCmdProcess::readPendingDatagrams);

localhost、127.0.0.1对网络编程造成不通的说明相关推荐

  1. Linux网络编程——黑马程序员笔记

    01P-复习-Linux网络编程 02P-信号量生产者复习 03P-协议 协议: 一组规则. 04P-7层模型和4层模型及代表协议 分层模型结构: OSI七层模型: 物.数.网.传.会.表.应TCP/ ...

  2. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  3. Linux网络编程 - 套接字与协议族

    一 理解网络编程和套接字(socket) 1.1 网络编程和套接字概要 网络编程就是编程程序使两台连网的计算机可以互相交换数据.那么,这两台计算机之间用什么传输数据呢?首先需要物理连接.如今大部分计算 ...

  4. WiFi网络编程(带OTA功能)

    参考:WiFi网络编程(上) 地址:https://www.bilibili.com/video/BV1VV411b75h/?spm_id_from=333.788.recommend_more_vi ...

  5. 脑残式网络编程入门(八):你真的了解127.0.0.1和0.0.0.0的区别?

    本文由"小姐姐养的狗"原创发布于"小姐姐味道"公众号,原题<127.0.0.1和0.0.0.0地址的区别>,收录时有优化和改动.感谢原作者的分享. ...

  6. 不为人知的网络编程(十三):深入操作系统,彻底搞懂127.0.0.1本机网络通信

    本文作者张彦飞,原题"127.0.0.1 之本机网络通信过程知多少 ",首次发布于"开发内功修炼",转载请联系作者.本次有改动. 1.引言 继<你真的了解 ...

  7. Java网络编程从0——》入门

    目录: 1.软件结构 2. 网络编程三要素 3. TCP通信程序(Socket和ServerSocket) 1.软件结构 1.C/S结构:全称是Client/Server结构,是指客户端和服务器结构如 ...

  8. 到底什么是 localhost、127.0.0.1、0.0.0.0 和 本机IP ?(参考多篇文章的学习笔记)

    到底什么是 localhost.127.0.0.1.0.0.0.0 和 本机IP ? 平时配置项目环境及运行项目的过程中,会接触到 localhost.127.0.0.1.0.0.0.0 和 本机IP ...

  9. 详细谈电脑ip、域名、内网、外网、localhost、127.0.0.1、网关等通讯基础知识(易懂)

    1. ip地址与域名的定义以及其关系 ip地址的定义: IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址. IP地址是IP协议提供的一种统一的地址格 ...

最新文章

  1. 白盒测试工具_别再头疼工作效率低!这些超实用的黑盒、白盒测试方法你都用上了吗?...
  2. 科学家首次在野外直接观察到雀类新物种的快速形成
  3. 好久没写blog了。最近感觉自己老了
  4. 大循环在内,小循环主外为什么会效率高
  5. 从零学习SwinTransformer
  6. 计算机屏幕显示电缆借口,电脑关机后显示器显示请检查电缆接口怎么办成功解决...
  7. java对角线之和_java编程之计算矩阵对角线和(从命令窗输入数据)
  8. 文件夹修改名字 matlab,matlab用 movefile更改文件夹内文件名字
  9. mysql数据库基础 博客园_MySQL数据库基础
  10. 阿里云ECS家族再添新成员,推出密集计算型实例规格族ic5
  11. python视频教程免费 西西-Python基础教程(第2版)
  12. JSON.parse 函数
  13. 解决Eclipse,MyEclipse出现An error has occurred,See error log for more details的错误
  14. java-redis字符类数据操作示例(一)
  15. linux 启动 pycharm程序的命令(pycharm已安装好)
  16. 崛起于Springboot2.X之集成单机Redis(14)
  17. ILSpy .NET反编译工具下载地址
  18. 机器学习入门概念--心血总结--史上最强--入门必读--回味无穷
  19. 毕业四个月,一个初出校门的程序员的生活现状
  20. 联想u盘装linux系统怎么安装步骤,联想电脑u盘安装系统步骤

热门文章

  1. 巧识滤波、稳压、比较、运放电路
  2. vivadoRAM中初始化文件coe如何快速生成
  3. 小ck活动机器人包包_别只知道小 CK!这 5 款小众包包更值得买
  4. while循环里嵌套一个if_if-else嵌套太深?教你一个新手都能掌握的设计模式搞定!...
  5. 20220213-CTF MISC-a_good_idea(stegsolve工具的使用)-2017_Dating_in_Singapore
  6. php5.3.3php5.4如何支持zend,PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法
  7. react 动态修改路由_reactjs – 如何动态添加重定向到反应路由器?
  8. Java如何定义三个圆_java – 以编程方式查找三个圆的交叉点
  9. kpu 处理器_首轮融资即估值过亿,中科驭数用全新专用计算架构让芯片也能“私人订制”...
  10. mkdirp——递归创建目录及其子目录