簡體   English   中英

Winsock-將客戶端重新連接到服務器-10061

[英]Winsock - reconnecting client to server - 10061

我以為我會為此提出一個新問題。 我已經建立了一個TCP服務器/客戶端,它們以我通常想要的方式進行通信。 1個服務器和1個客戶端。

我現在想做的是添加功能,一旦連接斷開,該功能將允許客戶端自動重新連接到服務器。 我在網上找不到有關如何執行此操作的完整信息時遇到麻煩。 這是(希望)相關的問題代碼:

服務器:

    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錯誤。

(如果我從服務器端斷開連接並收聽新端口,那沒有問題)

謝謝 !!!

您正在使用accept()的結果accept()即已連接的socket accept()覆蓋監聽的服務器socket s 這是完全錯誤的-您應該將隨后調用listen()同一服務器套接字重用於所有隨后的accept()調用,每次每次代表來自客戶端的全新TCP連接時,這都會為您提供一個新的套接字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM