網絡概念算法
交換機和路由器編程
交換機安全
端到端轉發,基於MAC地址實現不一樣設備間的數據轉發,轉發速度快.服務器
路由器網絡
根據實際數據路線轉發,基於網絡IP地址實現不一樣網絡間的數據轉發多線程
靜態路由異步
指網絡管理員配置好的轉發路徑,可以直接肯定數據路線轉發,大型和複雜的網絡環境一般不宜採用靜態路由,當連線一改變,則靜態路由須要從新配置socket
動態路由函數
路由器根據算法自動地創建本身的路由表實現數據轉發,因爲須要路由器之間頻繁地交換各自的路由表,從而安全保密性低.學習
網絡協議
爲數據交換而創建的規則、標準或約定的集合
協議棧
如上圖所示,能夠看到應用層的FTP協議是基於傳輸層的TCP協議來實現文件共享傳輸.而傳輸層的TCP協議則基於網絡層的IP實現的
默認狀況下FTP協議使用TCP端口中的 20和21這兩個端口,其中20用於傳輸數據,21用於傳輸控制信息
TCP和UDP
TCP(傳輸控制協議)
面向鏈接的協議, 主要用於大量數據的場合,好比文件傳輸,一個TCP鏈接必需要通過3次握手才能創建
而後握手完成後,便開始進行數據傳輸了.
爲何要第3次握手,而不是2次握手?
避免重複鏈接請求,若是第一次鏈接請求超時了, 這時客戶端假如重發請求,而第一次鏈接請求最終仍是發送到服務器了,則服務器將再次重複接受到該請求,因爲服務器以前已經肯定過了第3次肯定請求,因此服務器能夠直接拋棄無論了(假如沒有第3次確認,則服務器沒法避免重連)
一個TCP斷連則須要4次揮手才能斷開
1.客戶端發送一個FIN,用來關閉客戶到服務器的數據傳送
2.服務器收到這個FIN,它發回一個ACK,確認序號爲收到的seq序號加1。
3.服務器關閉與客戶端的鏈接,發送一個FIN給客戶端A
4.客戶端發回ACK報文確認,並將確認序號設置爲收到序號加1
UDP(用戶數據報協議)
無鏈接的協議, 主要用於不要求分組順序到達、少許數據的傳輸場合, 數據傳輸效率高.缺點容易掉包.
QT網絡編程
Qt Network模塊提供的類容許編寫 TCP/IP clients 和 servers、以及FTP和HTTP等經常使用協議(後續章節講解FTP和HTTP)
而QTcpSocket和QTcpServer類則是實現TCP客戶端和服務器用的.
QTcpSocket
在網絡編程中, QTcpSocket支持如下兩種訪問方式
1)異步(非阻塞)訪問
異步方式經過QTcpSocket的信號與槽實現,好比當咱們調用connectToHost()鏈接服務器時,此時並不是當即鏈接成功,因此咱們須要等待connected()信號觸發後,才知道鏈接成功,固然也能夠經過信號error()來處理與服務器的鏈接發生錯誤的異常事件.
2) 同步(阻塞)訪問
經過waitForXxxx()函數實現阻塞,最好使用多線程實現,不然的話,會致使界面也會進入阻塞.
QTcpSocket同步鏈接服務器步驟以下:
socket->connectToHost("192.168.1.101", 8088); //鏈接服務器 if (socket->waitForConnected(1000)) //阻塞等待1000ms qDebug("Connected!"); else return false; socket->write(data, len); //寫數據 socket ->waitForBytesWritten();
socket->waitForReadyRead(); //等待讀取數據
qDebug()<< "Received Bytes:" << socket->read(buf, sizeof(buf)-1);
socket ->disconnectFromHost(); //斷開鏈接 socket ->waitForDisconnected();
未完待續,下章來學習客戶端與服務器實例