C++ Winsock-将客户端重新连接到服务器-10061

C++ Winsock-将客户端重新连接到服务器-10061,c++,sockets,winsock,winsock2,C++,Sockets,Winsock,Winsock2,我想我会为此开始一个新的问题。 我设置了TCP服务器/客户端,它们以我通常想要的方式进行通信。1台服务器和1台客户端 我现在想做的是添加功能,允许客户端在连接丢失时自动重新连接到服务器。我很难在网上找到关于如何做这件事的完整信息。这是(希望是)相关的问题代码: 服务器: case FD_ACCEPT: //Connection request { SOCKET TempSock = accept(s, (struct sockaddr*)&from

我想我会为此开始一个新的问题。 我设置了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\u ntoa(fromm.sin\u addr))
将输出
[0,0,0]
。因此,客户端“认为”它已连接但未连接,服务器打印它已接受连接但无法发送数据…断开客户端的连接并尝试再次重新连接会导致错误

连接拒绝10061错误

(如果我从服务器端断开连接并侦听新端口,则没有问题)


谢谢

您正在用
accept()
的结果覆盖侦听服务器套接字
s
,即连接的套接字。这是完全错误的-您应该将调用的
listen()
打开的同一个服务器套接字重新用于对
accept()
的所有后续调用,这将在每次调用时为您提供一个新的套接字,每个套接字表示来自客户端的全新TCP连接