[英]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.