QT 网络编程(1)
生活随笔
收集整理的這篇文章主要介紹了
QT 网络编程(1)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?服務器端:QTcpServer
【1】基本用法:創建一個QTcpServer,然后調用listen函數監聽相應的地址和端口。當有客戶端鏈接到服務器時,會有信號newConnection()產生。調用nextPendingConnection()接受一個掛起的TcpSocket連接,該函數返回一個指向QTcpSocket的指針,同時進入到QAbstractSocket::ConnectedState狀態。這樣就可以和客戶端進行通信了。 如果錯誤發生,可以用函數serverError()返回錯誤類型,用errorString()返回錯誤提示字符串。 調用close使得QTcpServer停止監聽連接請求。盡管QTcpServer使用了事件循環,但是可以不這么使用。利用waitForNewConnection(),該函數阻塞直到有連接可用或者時間超時。 【2】重要函數: void incomingConnection (int socketDescriptor); 當一個連接可以用時,QTcpServer調用該函數。其基本過程是現創建一個QTcpSocket,設置描述符和保存到列表,最后發送newConnection() 事件消息。 QTcpSocket* QTcpServer::nextPendingConnection();返回下一個將要連接的QTcpSocket對象,該返回對象是QTcpServer的子對象,意味著如果刪除了QTcpSServer,則刪除了該對象。也可以在你不需要該對象時,將他刪除掉,以免占用內存。 客戶端:QTcpSocket,QAbstractSocket 【1】基本用法:在客戶端創建一個QTcpSocket,然后用connectToHost函數向對應的主機和端口建立連接。任何時候,可以用state()查詢狀態,初始為UnconnectedState,然后調用連接函數之后,HostLookupState,如果連接成功進入ConnectedState,并且發送hostFound()信號。當連接建立,發送connected(),在任何狀態下如果在錯誤發生error()信號發送。狀態改變發送stateChanged()信號。如果QTcpSocket準備好可讀可寫,則isValid() 函數范圍為真。 用read()和write()來讀寫,或者使用readLine()和readAll.當有數據到來的時候,系統會發送readyRead()信號。bytesAvailable()返回包的字節數,如果你不是一次性讀完數據,新的數據包到來的時候將會附加到內部讀緩存后面。setReadBufferSize()可以設置讀緩存的大小。 用disconnectFromHost()關閉連接,進入ClosingState。當所有數據寫入到socket,QAbstractSocket會關閉該臺socket,同時發送disconnected()消息。如果想立即終止一個連接,放棄數據發送,調用abort().如果遠程主機關閉連接,QAbstractSocket發送QAbstractSocket::RemoteHostClosedError錯誤,但是狀態還停留在ConnectedState,然后發送disconnected()信號。 QAbstractSocket提供幾個函數用來掛起調用線程,知道一定的信號發送,這些函數可以用來阻塞socket: waitForConnected() 阻塞知道一個連接建立。 waitForReadyRead() 阻塞知道有新的數據可以讀取。 waitForBytesWritten() 阻塞直到發送數據寫道socket中。 waitForDisconnected() 阻塞知道鏈接關閉。轉載于:https://blog.51cto.com/4469442/1148414
總結
以上是生活随笔為你收集整理的QT 网络编程(1)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OSGI(面向Java的动态模型系统)和
- 下一篇: SAS FC 磁盘