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

时间:2012-07-15 22:49:03

标签: c++ sockets winsock winsock2

我以为我会为此开始一个新问题。 我有一个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错误。

(如果我从服务器端断开连接并收听新端口就没问题了)

谢谢!!!

1 个答案:

答案 0 :(得分:1)

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