2

我想我会为此提出一个新问题。我设置了一个 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 错误。

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

谢谢 !!!

4

1 回答 1

1

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

于 2012-07-15T23:49:53.033 回答