2012-07-15 151 views
2

我想我会为此开始一个新问题。 我有一个TCP服务器/客户端设置,他们沟通我一般想要的方式。 1个服务器和1个客户端。Winsock - 重新连接客户端到服务器 - 10061

我现在要做的是添加功能,允许客户端在连接丢失后自动重新连接到服务器。我无法在网上找到有关如何执行此操作的完整信息。这是(希望)相关的问题代码:

SERVER:

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

您将要覆盖的聆听服务器套接字saccept()的结果,即连接插座。这是完全错误的 - 您应该重复使用您称为listen()的同一个服务器套接字,以便所有后续调用至accept(),这将为您提供一个新的套接字,每次都表示来自客户端的全新TCP连接。

+0

完美谢谢! – Soran 2012-07-16 01:42:17

相关问题