C++ Winsock-将客户端重新连接到服务器-10061
我想我会为此开始一个新的问题。 我设置了TCP服务器/客户端,它们以我通常想要的方式进行通信。1台服务器和1台客户端 我现在想做的是添加功能,允许客户端在连接丢失时自动重新连接到服务器。我很难在网上找到关于如何做这件事的完整信息。这是(希望是)相关的问题代码: 服务器: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
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连接