QT分析之網路編程(一)

來源:互聯網
上載者:User

 

QT分析之網路編程(一)  

2010-07-01 23:19:52|  分類:

QT分析之網路編程 |  標籤:
|字型大小大中小 訂閱

QT分析之網路編程(一)

程式人生 2010-01-28 16:25:53 閱讀299 評論0 字型大小:大中小

首先對Windows下的網路編程總結一下:

如果是伺服器,其WinSDK調用分別為:

WSAStartup() -> socket() -> htons() / htonl() -> bind() -> listen() -> accept() -> recv() / send() -> closesocket() -> WSACleanup()

如果是用戶端程式,其調用序列為:

WSAStartup() -> socket() -> htons() / htonl() -> connect() -> recv() / send() -> closesocket() -> WSACleanup()

前面轉貼的用戶端(WinSocket溫習)程式中,收到資訊就在console列印出來然後退出了;在一般的應用中,通常是要一直等待收發訊息的,直到程式確認退出才關閉socket。如果用一個輪詢就會佔用很多的CPU資源,所以很多嵌入式設計中會用一個WaitForMultiObject調用,等待退出命令或者逾時,然後退出或進行下一輪資訊接受。在Windows平台下也有一些比較高明的設計,使用非同步socket,然後用非同步選擇的辦法,實現多線程和事件的並發。在WinSocket中,同樣也有一套非同步Socket函數,那就是使用WSAAsyncSelect()及其配合函數。具體可以參考MSDN。QT在Windows平台上的實現,肯定也跟這些SDK調用有關。

按照這個思路,果然在QT代碼裡面找到了Qnativesocketengine_win.cpp,WSAStartup(),WSASocket()等序列WSA函數都有。QNativeSocketEnginePrivate類把這些SDK封裝成:createNewSocket()、option()、setOption()、nativeConnect()、nativeBind()、nativeListen()、nativeAccept()、nativeWrite()、nativeRead()、nativeSelect()、nativeClose()等。按照QT的設計,QPrivate類是資料類;Q類應該是主類。接著看QNativeSocket類的繼承:

QNativeSocketEngine : public QAbstractSocketEngine : public QObject

QAbstractSocketEngine類是使用了大量純虛函數的定義。繼續深入查看,發現大量有關的類:QAbstractSocket,SocketAsyncHandler,QTcpSocket,QUdpSocket等,看來我要先瞭解下QT網路編程體系再進一步分析之。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.