1、获取主机名

就是计算机的名字(计算机名),网上邻居就是根据主机名来识别的,这个名字可以随时更改,从我的电脑属性的计算机名就可更改。 用户登陆时候用的是操作系统的个人用户帐号,这个也可以更改,从控制面板的用户界面里改就可以了。这个用户名和计算机名无关。

因特网上的主机或 Web 站点由主机名识别。主机名有时称为域名。主机名映射到 IP 地址,但是主机名和 IP 地址之间没有一对一关系。

当 Web 客户机发出到主机的 HTTP 请求时,使用主机名。发出请求的用户可能会指定服务器的 IP 地址,而不是主机名,但这在因特网上不常见。对于用户来说,主机名比数字 IP 地址更方便。公司、组织和个人常常选择其 Web 站点的主机名,用户能很容易地记住这些主机名。

现代 HTTP 实施中更重要的是,在 HTTP 请求中使用主机名意味着:

* 一个主机名中的服务可以由许多服务器提供,它们有不同的 IP 地址。

* 具有一个 IP 地址的一台服务器可以提供许多主机名中的服务。这称为虚拟主机。虚拟主机说明此过程。

主机名由称为 DNS 服务器或域名服务器的服务器映射到 IP 地址。DNS 代表域名服务。在大型网络中,许多 DNS 服务器可以相互协作,以提供主机名和 IP 地址之间的映射

在Qt上使用QHostInfo类的localHostName类来获取本机的计算机名称,调用QHostInfo类的fromName()函数,使用上面获得的主机名为参数,来获取本机的信息。然后再利用QHostInfo类的addresses()函数,获取本机的所有IP地址信息。在我这里只有一条IP地址。但是,在其他系统上,可能出现多条IP地址,其中可能包含了IPv4和IPv6的地址,一般我们需要使用IPv4的地址。

 //! 获得本机主机名//! QHostInfo提供了一系列有关网络信息的静态函数,可以根据主机名获得分配的IP地址,也可以根据IP地址获得相应的主机名QString localHostName = QHostInfo::localHostName();qDebug()<<"hostInfo:"<<localHostName;//! 根据主机名获得有关主机信息,包括IP地址等。QHostInfo::fromName()函数通过主机名查找IP地址信息QHostInfo hostInfo = QHostInfo::fromName("www.baidu.com");qDebug() <<"IP Address: "<<hostInfo.addresses();//! 获得主机的IP地址列表QList<QHostAddress> listAddress = hostInfo.addresses();//! 输出IPv4地址for (int i = 0; i < listAddress.size(); i++){if (listAddress.at(i).protocol() == QAbstractSocket::IPv4Protocol)qDebug()<<listAddress.at(i).toString();}输出结果:
hostInfo: "DESKTOP-E5BLI0H"
IP Address:  (QHostAddress("14.215.177.39"), QHostAddress("14.215.177.38"))
"14.215.177.39"
"14.215.177.38"

2. 网络接口

通过QNetworkInterface类来获取本机的IP地址和网络接口信息,QNetworkInterface类提供了程序所运行时的主机的IP地址和网络接口信息的列表。在每一个网络接口信息中都包含了0个或多个IP地址,而每一个IP地址又包含了和它相关的子网掩码和广播地址,它们三者被封装在一个QNetworkAddressEntry对象中。网络接口信息中也提供了硬件地址信息。

//! QNetworkInterface类提供了一个主机IP地址和网络接口的列表//! 获取所有网络接口的列表QList<QNetworkInterface> list = QNetworkInterface::allInterfaces();foreach(QNetworkInterface interface,list) //遍历每一个网络接口{qDebug() << "Device: "<<interface.name(); //设备名//! 硬件地址qDebug() << "HardwareAddress: "<<interface.hardwareAddress();//! 获取IP地址条目列表,每个条目中包含一个IP地址,//! 一个子网掩码和一个广播地址QList<QNetworkAddressEntry> entryList= interface.addressEntries();foreach(QNetworkAddressEntry entry,entryList)//! 遍历每个IP地址条目{qDebug()<<"IP Address: "<<entry.ip().toString(); //! IP地址qDebug()<<"Netmask: "<<entry.netmask().toString(); //! 子网掩码qDebug()<<"Broadcast: "<<entry.broadcast().toString();//! 广播地址}}
输出:
Device:  "ethernet_32769"
HardwareAddress:  "8C:EC:4B:14:69:BE"
IP Address:  "fe80::345e:eefd:2aad:f6c6%ethernet_32769"
Netmask:  "ffff:ffff:ffff:ffff::"
Broadcast:  ""
IP Address:  "169.254.246.198"
Netmask:  ""
Broadcast:  ""
Device:  "wireless_32769"
HardwareAddress:  "00:E1:8C:AA:82:74"
IP Address:  "fe80::482:9c3a:933f:cff0%wireless_32769"
Netmask:  "ffff:ffff:ffff:ffff::"
Broadcast:  ""
IP Address:  "169.254.207.240"
Netmask:  ""
Broadcast:  ""
Device:  "wireless_32770"
HardwareAddress:  "02:E1:8C:AA:82:73"
IP Address:  "fe80::f87a:6713:62c4:7cf4%wireless_32770"
Netmask:  "ffff:ffff:ffff:ffff::"
Broadcast:  ""
IP Address:  "169.254.124.244"
Netmask:  ""
Broadcast:  ""
Device:  "ethernet_32774"
HardwareAddress:  "00:FF:07:C2:1E:1B"
IP Address:  "fe80::fd7b:fedd:bc79:49f%ethernet_32774"
Netmask:  "ffff:ffff:ffff:ffff::"
Broadcast:  ""
IP Address:  "169.254.4.159"
Netmask:  ""
Broadcast:  ""
Device:  "wireless_32768"
HardwareAddress:  "00:E1:8C:AA:82:73"
IP Address:  "fe80::3907:9933:647a:3d8b%wireless_32768"
Netmask:  "ffff:ffff:ffff:ffff::"
Broadcast:  ""
IP Address:  "192.168.0.102"
Netmask:  "255.255.255.0"
Broadcast:  "192.168.0.255"
Device:  "ethernet_32770"
HardwareAddress:  "00:E1:8C:AA:82:77"
IP Address:  "fe80::fc4a:85e2:5ea7:ab5b%ethernet_32770"
Netmask:  "ffff:ffff:ffff:ffff::"
Broadcast:  ""
IP Address:  "169.254.171.91"
Netmask:  ""
Broadcast:  ""
Device:  "loopback_1"
HardwareAddress:  ""
IP Address:  "::1"
Netmask:  "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff"
Broadcast:  ""
IP Address:  "127.0.0.1"
Netmask:  ""
Broadcast:  ""

3. 端口号

所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号 。

在网络技术中,端口包括逻辑端口和物理端口两种类型。物理端口是用于连接物理设备之间的接口,如ADSL Modem、集线器、交换机、路由器上用于连接其他网络设备的接口,如RJ-45端口、SC端口等等 。逻辑端口是指逻辑意义上用于区分服务的端口,比如用于浏览网页服务的80端口,用于FTP服务的21端口等。如TCP/IP协议中的服务端口,通过不同的逻辑端口来区分不同的服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口 [3]  。端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535 。

端口号的主要作用是表示一台计算机中的特定进程所提供的服务。网络中的计算机是通过IP地址来代表其身份的,它只能表示某台特定的计算机,但是一台计算机上可以同时提供很多个服务,如数据库服务、FTP服务、Web服务等,我们就通过端口号来区别相同计算机所提供的这些不同的服务,如常见的端口号21表示的是FTP服务,端口号23表示的是Telnet服务端口号25指的是SMTP服务等。端口号一般习惯为4位整数,在同一台计算机上端口号不能重复,否则,就会产生端口号冲突这样的例外。

TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号。对于这65536个端口号有以下的使用规定[6]  :

(1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1---1023之间的端口号,是由ICANN来管理的;端口号从1024---49151是被注册的端口,也成为“用户端口”,被IANA指定为特殊服务使用 [6]  ;

(2)客户端只需保证该端口号在本机上是惟一的就可以了。客户端端口号因存在时间很短暂又称临时端口号   ;

(3)大多数TCP/IP实现给临时端口号分配1024---5000之间的端口号。大于5000的端口号是为其他服务器预留的   。

UNIX操作系统因具有运行稳定、系统要求低、安全性高,而得到广泛应用。其伯克利套接字,发展较早,具有鲜明特点,例如:UNIX系统有保留端口号的概念。只有具有超级用户特权的进程才允许给它自己分配一个保留端口号,这些端口号介于1~1023之间,一些应用程序将它作为客户与服务器之间身份认证的一部分。大多数TCP/IP实现给临时端口分配1024~5000之间的端口号。大于5000的端口与是为其他服务器预留的(Internet上并不常用的服务)。

当一台服务器有大量的端口在使用,有两种方式来查看端口: 一种是利用系统内置的命令,一种是利用第三方端口扫描软件[8]  。

1.用“netstat ”查看端口状态

在Windows中,可以在命令提示符下使用“netstat ”查 看系统端口状态,可以列出系统正在开放的端口号及其状态 [8]  。

2.用第三方端口扫描软件

第三方端口扫描软件有许多,界面虽然千差万别,但是功能却是类似的。这里以“Fport” (可到?type_t=7或下载)为例讲解。“Fport”在命令提示符下使用,运行结果 与“netstat -an”相似,但是它不仅能够列出正在使用的端口号及类型,还可 以列出端口被哪个应用程序使用 [8]  。

3.用“netstat -n”命令,以数字格式显示地址和端口信息 。

如果仔细检查这些标准的简单服务以及其他标准的TCP/IP服务(如Telnet、FTP、 SMTP等)的端口号时,我们发现它们都是奇数。这是有历史原因的,因为这些端口号都是从NCP端口号派生出来的(NCP,即网络控制协议,是ARPANET的运输层协议,是TCP的前身)。NCP是半双工的,不是全双工的,因此每个应用程序需要两个连接,需预留一对奇数和偶数端口号。当TCP和UDP成为标准的运输层协议时,每个应用程序只需要一个端口号,因此就使用了NCP中的奇数。

4. IP地址分类

IP地址由四段组成,每个字段是一个字节,8位,最大值是255,,

IP地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。

IP地址的四大类型标识的是网络中的某台主机。IPv4的地址长度为32位,共4个字节,但实际中我们用点分十进制记法。

IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。    全0和全1的都保留不用。

A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络

B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络

C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络

D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1]  。

E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下: 
A类地址:10.0.0.0~10.255.255.255 
B类地址:172.16.0.0~172.31.255.255 
C类地址:192.168.0.0~192.168.255.255

回送地址:127.0.0.1。 也是本机地址,等效于localhost或本机IP。一般用于测试使用。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。

Qt学习笔记之网络相关概念相关推荐

  1. Qt学习笔记之网络和连接

    Qt提供用于高级和低级网络通信的类,用于Web集成的类以及用于进程间通信的类. 对于高级网络流量,Qt Network在使用的操作上提供了一个抽象层,仅显示高级类和功能.Qt Network还可以处理 ...

  2. Qt学习笔记之网络编程

    Qt网络模块提供了允许您编写TCP / IP客户端和服务器的类.它提供了代表低级网络概念的低级类(例如QTcpSocket,QTcpServer和QUdpSocket),以及高级类(例如QNetwor ...

  3. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  4. Qt学习笔记之数据库

    一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...

  5. QT学习笔记(摘抄)

    QT学习笔记-1.QT主要的对象 说来惭愧学习c++很长时间了一直没有使用c++开发过软件界面 所以现在想认认真真的学习一个c++图形界面框架库 本来想学习Xwidget但是这个资料不大好找 有啥问题 ...

  6. 【QT学习笔记】基于QT的天气预报

    [QT学习笔记]基于QT的天气预报 前言 那就开始吧! 先看一下效果 颜面最重要,画个UI 构造实现 怎么开始? 开始解析数据 关于城市切换 ok 最后源码献上 感谢 前言 学习qt已经有一段时间了, ...

  7. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  8. Qt学习笔记之MySQL数据库

    一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  9. Qt学习笔记之文件处理

    Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...

最新文章

  1. C语言之字符串处理函数
  2. 后台(crontab,at,,nohup)
  3. table高度改变时触发什么事件_(立下flag)每日10道前端面试题11 关于事件十问...
  4. python中返回上一步操作_selenium操作iframe元素,切入退出操作
  5. sql每个月每个人的花销占比_星座月运(2020年12月),每个人开支花费大,得精打细算...
  6. java api 英文_教你查阅Java API 英文文档(JDK 11)
  7. python类的定义和创建_Python类对象的创建和使用
  8. 一种牛逼的网站分享插件实现
  9. 信息化项目甲方采购的准备与实施
  10. plist java_帮助plist文件
  11. 简单说说路由器和交换机的区别
  12. kindle电子书和新闻推送及RSS资源…
  13. html网页加线条,「网站特效」html5 canvas粒子线条特效制作方法
  14. 网线传输速度测试_千兆网络的速度测试
  15. 特斯拉model3中控屏怎么关_特斯拉Model 3为什么取消仪表盘? - 全文
  16. 解决scalac Error: bad option -make:transitive
  17. Appium学习:雷电模拟器的使用
  18. 台式计算机风扇为什么光散热,电脑噪音太大了,要如何降噪?其实不光是风扇的事!...
  19. Windows Media Player Network Sharing Service 启动失败
  20. 第一个项目的cmd代码

热门文章

  1. wxWidgets:wxMBConv概述
  2. Boost.Signals 的文档/查看示例
  3. boost::ratio_greater相关的测试程序
  4. boost::python::pointee相关的测试程序
  5. boost::mp11::mp_map_update_q相关用法的测试程序
  6. boost::histogram::accumulators用法的测试程序
  7. boost::geometry::model::d2::point_xy用法的测试程序
  8. GDCM:Dicom文件重复的PCDE测试程序
  9. DCMTK:读取多个图像的示例应用程序
  10. DCMTK:使用JPEG-LS传输语法压缩DICOM文件