Winsockt的TClientSocket設置ClientType的屬性為ctNonBlocking.則通訊模式為非阻塞模式。 ctBlocking為阻塞模式,這裡說一下阻塞與非阻塞的一些區別。 ctBlocking模式當客戶端請求數據後,線程阻塞不繼續執行,直到服務端返回數據,客戶端將據需執行,並讀取數據。 然而阻塞模式的缺陷還是比較大的,經常會使程序死掉或者假死。當服務端發送較大的文件時,阻塞模式基本廢掉了,由於數據緩沖較小,不能及時的獲取數據,阻塞模式將會認為數據發送完畢,會斷掉服務連接,導致數據傳送失敗。因此阻塞模式比較適用於網絡通暢,並且數據量小的情況。 非阻塞模式當客戶端發送連接請求,及open之後,並不會執行之後的請求,就算有請求的數據也不會發送,而是會執行connect和write這兩個事件,中間應該還有connecting事件。connect是連接成功後的事件,write是准備發送請求的事件。我們所有的發送請求都會在write事件裡面執行。當我們在write事件中執行後,會調用read事件,在read事件中我們將會接受到服務端發送的數據,如果數據量比較大,則會一直調用read事件,直到數據發送完畢。非阻塞模式適合數據量較大的情況。 阻塞模式與非阻塞模式區別還是較大,但是根據我個人觀點,非阻塞模式相對與阻塞模式有更大的優勢,無論是性能,還是數據完整性方面的都較好。因此在我開發時也是使用非阻塞的模式。