2012-07-15 209 views
2

我想我會爲此開始一個新問題。 我有一個TCP服務器/客戶端設置,他們溝通我一般想要的方式。 1個服務器和1個客戶端。Winsock - 重新連接客戶端到服務器 - 10061

我現在要做的是添加功能,允許客戶端在連接丟失後自動重新連接到服務器。我無法在網上找到有關如何執行此操作的完整信息。這是(希望)相關的問題代碼:

SERVER:

case FD_ACCEPT: //Connection request 
    { 
     SOCKET TempSock = accept(s, (struct sockaddr*)&fromm, &fromlenn); 
     s = TempSock; //Switch old socket to the new one 
     m_sNetworkStatus.Format("[%s] accepted.", inet_ntoa(fromm.sin_addr)); 
     m_hNetworkStatus.SetWindowTextA(m_sNetworkStatus); 
    } 

第一個客戶端連接經過精細。服務器偵聽,客戶端連接,客戶端斷開連接... 但是客戶端第二次嘗試連接由此產生的客戶端IP地址(如服務器所見),使得打印inet_ntoa(fromm.sin_addr))將輸出[0,0,0,0]。因此,客戶端「認爲」它的連接,但它是不是和服務器打印,它接受連接,但沒有數據可以發送...斷開連接的客戶端,並試圖再次重新連接導致

連接拒絕10061錯誤。

(如果我從服務器端斷開,並聽取了新的端口有沒有問題)

謝謝!

回答

1

您將要覆蓋的聆聽服務器套接字saccept()的結果,即連接插座。這是完全錯誤的 - 您應該重複使用您稱爲listen()的同一個服務器套接字,以便所有後續調用至accept(),這將爲您提供一個新的套接字,每次都表示來自客戶端的全新TCP連接。

+0

完美謝謝! – Soran 2012-07-16 01:42:17

相關問題