學習Qt網路程式設計

2021-06-21 23:46:32 字數 3119 閱讀 6374

qtcpsocket 詳細描述:

qtcpsocket 類提供乙個tcp套接字

tcp是乙個面向連線,可靠的的通訊協議,非常適合於連續不斷的資料傳遞

qtcpsocket 是qabstractsocket類非常方便的乙個子類,讓你建立乙個tcp連線和資料流交流。

注意:tcp套接字不能以qiodevice::unbuffered模式來開啟

在symbian系統上,程式想用這個類的話必須擁有networkservices平台支援,如果客戶機缺少這個能力,將會導致"恐懼"(不明白為什麼這麼翻譯)

成員函式:

qtcpsocket::qtcpsocket ( qobject * parent = 0 )

以unconnectedstate態建立乙個qtcpsocket物件

qtcpsocket::~qtcpsocket ()   [virtual]『

析構函式,銷毀物件

qtcpserver類

提供乙個tcp基礎服務類 繼承自qobject

這個類用來接收到來的tcp連線,可以指定tcp埠或者用qtcpserver自己挑選乙個埠,可以監聽乙個指定的位址或者所有的機器位址。

呼叫listen()來監聽所有的連線,每當乙個新的客戶端連線到服務端就會發射訊號newconnection()

呼叫nextpendingconnection()

來接受待處理的連線。返回乙個連線的qtcpsocket(),我們可以用這個返回的套接字和客戶端進行連線

如果有錯誤,servererror()

返回錯誤的型別。呼叫errorstring()

來把錯誤列印出來。

當監聽連線時候,可以呼叫serveraddress()和serverport()來返回服務端的位址和埠。

呼叫close()來關閉套接字,停止對連線的監聽。『

儘管qtcpserver大多時候設計使用事件迴圈,也可以不適用事件迴圈,可以使用waitfornewconnection(),會一直阻塞,知道乙個連線可以用或者超時。

在symbian平台上,同樣的需要networkservices平台支援。

成員函式

------------------------------

void close() 關閉服務,然後伺服器講不再監聽任何連線

qstring errorstring()const 錯誤時候返回錯誤的字串

------------------------------

bool haspendingconnections()const 如果服務端有乙個待處理的連線,就返回真,否則返回假

qtcpsocket* nextpendingconnection()

返回乙個套接字來處理乙個連線,這個套接字作為服務端的乙個子物件,意味著當qtcpserver物件銷毀時候,這個套接字也自動刪除,當使用完後明確的刪除這個套接字也好,這樣可以避免記憶體浪費。當沒有可處理的連線時候,這個函式返回0。

注意:返回的套接字不能再其他執行緒中使用。如果想在其他執行緒中使用,那麼你需要過載incomingconnection()

-------------------------------------

void incomingconnection(int socketdescriptor)[virtual protected]

當qtcpserver有乙個新連線時候呼叫這個虛函式,socketdescriptor引數是新連線的套接字描述符

這個函式新建乙個qtcpsocket套接字,建立套接字描述符,然後儲存套接字在乙個整形的待連線鍊錶中。最後發射訊號newconnection()

重寫這個函式,當乙個新連線時候,來調整這個函式的行為。

當服務端使用qnetworkproxy伺服器**時候,使用一般的套接字函式套接字描述符可能不可以用,這時候應該使用 qtcpsocket::setsocketdescriptor()來設定描述符

--------------------------------------

bool islistening()const

當服務端正在監聽連線時候返回真,否則返回假

bool listen( const qhostaddress & address = qhostaddress::any, quint16 port = 0 )

告訴服務端監聽所有來自位址為address埠為port的連線,如果port為0,那麼會自動選擇,如果address是qhostaddress::any,那麼服務端監聽所有連線,成功返回1,否則返回0

int maxpendingconnections()const

返回最大允許連線數。預設是30

void setmaxpendingconnections(int numconnections)

設定待處理的連線最大數目為numconnections,當超過了最大連線數後,客戶端仍舊可以連線服務端,但是服務端不在接受連線,作業系統會把這些鏈結儲存在乙個佇列中。

-----------------------------------------

qnetworkproxy proxy()const

返回這個套接字的網路**層。

void setproxy(const qnetworkproxy & networkproxy)

設定這個套接字的網路**層,進製使用**時候,使用qnetworkproxy::noproxy型別,例如server->setproxy(qnetworkproxy::noproxy);

quint16 serverport()const      serveraddress()

當服務端正在監聽時候,返回服務端的埠和位址

-----------------------------------------

bool waitfornewconnection(int msec=0,bool *timedout=0)

最大等待msec毫秒或者等待乙個新連線可用。如果乙個連線可用,返回真,否則返回假。如果msec不等於0,那麼超時將會被呼叫

這是乙個阻塞函式,最好用在單執行緒應用程式中。由於會阻塞。當沒有事件迴圈可用時候,這個函式很好用。

非阻塞的選項和訊號newconnection()關聯起來。

當msec為-1時候,函式將沒有超時

QT學習筆記之QT網路程式設計

tcp 傳輸控制協議,提供的是面向連線 可靠的位元組流服務。當客戶和伺服器彼此交換資料前,必須先在雙方之間建立乙個tcp連線,之後才能傳輸資料。tcp提供超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。udp 使用者資料報協議,是乙個簡單的面向資料報的運輸層協議。udp...

Qt網路程式設計

qt提供了socket的支援,它採用api形式的封裝,使得程式設計師不需要接觸底層的 就可以對socket進行操作。1.udp的實現 udp不是連線協議,沒有客戶端與服務端的概念。1 建立套接字相關物件 1 qsocketdevice mureceivesocket 套接字物件 23 qsocket...

Qt 網路程式設計

目錄 承載管理 bearer management 控制系統連線狀態的api 程序間通訊 inter process communication in qt qt程式的程序間通訊 網路程式設計 network programming 介紹qt上的網路程式設計 加密套接字協議層 ssl secure ...