日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/21 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt学习笔记之网络相关概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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是否正常。

?

?

?

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的Qt学习笔记之网络相关概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。