Qt網絡編程之二

 使用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(域名服務)協議。
       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()來實現,並且自定義的程序級代理策略可以通過創建QNetworkProxyFactor的子類實現,查看相應的類文檔獲取詳細信息。


Bearer Management支持
       Bearer Management控制着設備的連接狀態,例如:應用程序可以啓動和停止網絡接口,並且在接入點之間透明的漫遊。
       QNetworkConfigurationManager類管理者設備所知的一系列網絡配置。一個網絡配置描述了啓動網絡接口的參數集合,並且使用QNetworkConfiguration類代表。
       一個網絡接口通過給定的網絡配置打開一個QNetworkSession來完成啓動。大多數情況下,基於特定平臺默認的網絡配置創建網絡會話是合適的。默認的網絡配置是函數QNetworkConfigurationManager::defaultConfiguration()返回的。
       在一些平臺上,平臺要求應用程序在進行任何網絡操作之前打開一個網絡會話。這個可以通過
QNetworkConfigurationManager::capabilities()函數返回QNetworkConfigurationManager::NetworkSessionRequired
的值來測試。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章