天天看點

關于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。用于新手學習之用。

關于socket tcp 斷線重連

<a href="http://files.cnblogs.com/files/zhangdongsheng/SocketReconnect.rar" target="_blank">源碼下載下傳</a>

繼續閱讀