Qt網路編程之二

來源:互聯網
上載者:User

 使用QUdpSocket進行UDP編程


       UDP(使用者資料包通訊協定)是一個輕量級的,不可靠的,面向資料報的,無連線協定。當可靠性不是很重要的時候就可以使用該協議。例如:一個用於報告時間的伺服器可以使用UDP。如果包含時間的資料報丟失了,那麼用戶端只需發出另外一個請求。
       QUdpSocket類允許你發送和接收UDP資料報。它繼承自QAbstractSocket,因此它有共用了QTcpSocket的大多數介面。最主要的不同就是QUdpSocket以資料報的形式發送資料,而不像QTcpSocket使用連續的資料流。簡言之,一個資料報就是一個有大小限制資料包(通常小於512bytes),包含發送方的IP地址和連接埠號碼、接收方的IP地址和連接埠號碼以及要傳輸的資料。
       QUdpSocket支援IPv4廣播。廣播通常是用於實現網路發現協議,例如尋找網路上擁有最大空餘磁碟空間的主機。一個主機發出的資料報,網路上的其它主機都可以接收到。每一個主機都接收到一個請求,然後返回一個應答資訊給寄件者,表明當前可用磁碟空間。發廣播的主機直到接收到所有其它主機的應答資訊才從中選擇可用磁碟空間最大的主機來儲存資料。要廣播一個資料報,僅僅只需要將該資料報發送給特殊的地址:QHostAddress::Broadcast (255.255.255.255),或者是你本網的廣播位址。
       QUdpSocket::bind()建立用於接收進入的資料報,這個和TCP伺服器的 QTcpServer::listen()十分相似。無論什麼時候當一個或者多個資料報到達時,QUdpSocket就會發送readyRead()訊號。調用QUdpSocket::readDatagram()來讀取資料報。
       Broadcast Sender 和 Broadcast Receiver樣本展示了如何使用Qt編寫UDP寄件者和UDP接收者。

       QUdpSocket同樣支援多播。Multicast Sender 和 Multicast Receiver樣本展示了如何編寫UDP多播用戶端。



使用QHostInfo解析主機名稱
       在建立網路連接之前,QTcpSocket和QUdpSocket進行一個名稱查詢,將你串連的主機的名稱翻譯為一個IP地址。這個操作通常都是使用DNS(網域名稱服務 (DNS))協議。
       QHostInfo提供了一個靜態方法,使得你可以自己完成這個查詢操作。提供使用一個主機名稱、一個QObject指標和一個槽函數作為參數調用QHostInfo::lookupHost(),QHostInfo將會執行名稱查詢,並且在查詢結束的時候調用已經指定的槽函數。實際的查詢操作將會在一個單獨的線程中完成,利用作業系統自己的方法進行名稱查詢操作。
       QHostInfo也提供了一個稱為QHostInfo::fromName()的靜態方法,該方法將主機名稱作為參數和返回的結果。在這種情況下,查詢操作與函數調用者在一個線程中完成。這個重載對於非GUI應用或將查詢操作放在一個單獨的,非GUI的線程中是十分有用的。(在一個GUI線程中調用這個函數可能會在它執行查詢操作的時候導致你的UI凍結。)

支援網路代理程式
       使用Qt進行網路通訊可以通過代理完成,也就是在本地和遠端串連中指向或者過濾網路路徑。
       單個的代理是由QNetworkProxy類呈現的,該類用來描述和配置到代理的接連。不同層次的網路通訊代理類型都得到了支援,由於SOCKS 5的支援,使得允許在一個低層次的網路流量使用代理,HTTP和FTP代理工作在協議層次。查看QNetworkProxy::ProxyType擷取更多的資訊。
       代理可以在一個應用程式的單個通訊端或者全部網路通訊上使能。一個新開啟的通訊端在它被串連之前可以通過調用QAbstractSocket::setProxy()函數來使用代理。應用程式範圍的代理可以通過調用QNetworkProxy::setApplicationProxy()函數對所有的通訊端串連使能的。
       代理工廠主要用於建立代理使用的策略。QNetworkProxyFactory是通過基於查詢具體代理類型來支援代理的。 查詢本身是使用QNetworkProxyQuery對象來編碼的,該對象以基於關鍵的標準來選擇使能的代理,,例如,代理的目的(TCP,UDP串連,TCP伺服器,URL請求),本地的連接埠,遠程主機和連接埠,使用的協議(HTTP,FTP等)。
QNetworkProxyFactory::proxyForQuery()被用來直接的查詢工廠。一個應用程式範圍的代理的策略可以通過傳遞一個factory給QNetworkProxyFactory::setApplicationProxyFactory()來實現,並且自訂的程式級Proxy 原則可以通過建立QNetworkProxyFactor的子類實現,查看相應的類文檔擷取詳細資料。

Bearer Management支援
       Bearer Management控制著裝置的串連狀態,例如:應用程式可以啟動和停止網路介面,並且在存取點之間透明的漫遊。
       QNetworkConfigurationManager類管理者裝置所知的一系列網路設定。一個網路設定描述了啟動網路介面的參數集合,並且使用QNetworkConfiguration類代表。
       一個網路介面通過給定的網路設定開啟一個QNetworkSession來完成啟動。大多數情況下,基於特定平台預設的網路設定建立網路會話是合適的。預設的網路設定是函數QNetworkConfigurationManager::defaultConfiguration()返回的。
       在一些平台上,平台要求應用程式在進行任何網路操作之前開啟一個網路會話。這個可以通過
QNetworkConfigurationManager::capabilities()函數返回QNetworkConfigurationManager::NetworkSessionRequired
的值來測試。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.