Winsock-正在将客户端重新连接到服务器-10061

Winsock - reconnecting client to server - 10061

本文关键字:服务器 -10061 重新连接 客户端 Winsock-      更新时间:2023-10-16

我想我会为此开始一个新问题。我设置了一个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);  
    }  

第一个客户端连接正常。服务器监听,客户端连接,客户端断开连接。。。BUT客户端第二次尝试连接生成的客户端IP地址(如服务器所见)时,打印inet_ntoa(fromm.sin_addr))将输出[0,0,0,0]。因此,客户端"认为"它已经连接,但事实并非如此,服务器打印出它接受了连接,但无法发送任何数据。。。在客户端断开连接并尝试再次重新连接会导致

连接被拒绝10061错误。

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

谢谢!!!

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