關於socket tcp 斷線重連


這個問題困擾過我幾次,都沒有來得及研究,今天研究一下。

  • 首先寫一個最簡易的socket tcp程序,連接成功后再關閉服務器然后再用客戶端各種操作看是什么情況

測試表明

(1)客戶端已經連接,當服務端關閉程序時,客戶端調用send函數發送失敗,WSAGetLastError() 返回10054(遠程主機強迫關閉了一個現有的連接) 

(2)客戶端已經連接,當客戶端關閉程序時,服務端調用recv函數接收失敗,WSAGetLastError() 返回10054(遠程主機強迫關閉了一個現有的連接) ,這時對這個客戶端的socket調用select函數時,會立即返回可讀。

(3)客戶端已經連接,當服務端關閉程序時,客戶端調用recv函數接收失敗,WSAGetLastError() 返回10054

(4)WSAAsyncSelect模式的服務端,當客戶端軟件關閉時,服務器收到的消息為FD_CLOSE,錯誤代碼為10053(您的主機中的軟件中止了一個已建立的連接)

  • 關於客戶端斷線重連

粗略的做法是,當客戶端調用send或recv失敗,然后WSAGetLastError()判斷錯誤編號,然后關閉socket。再創建一個socket。然后進行connect操作。

 

下面附上我寫的一個基於socket流式套接字的源碼服務端支持一對多聊天。socket相關通信都是用windows api。用於新手學習之用。

 

 

 

 

源碼下載

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM