我想我会为此提出一个新问题。 我设置了 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]
。因此,客户端“认为”它已连接但没有连接,服务器打印它接受了连接但无法发送数据......在客户端断开连接并尝试再次重新连接会导致
connection refused 10061 error.
(如果我断开与服务器端的连接并监听一个新端口就没有问题)
谢谢!!!
最佳答案
你正在用 accept()
的结果覆盖你的监听服务器套接字 s
,即已连接的套接字。这是完全错误的——您应该为所有随后对 accept()
的调用重用调用 listen()
的同一个服务器套接字,这会给您一个 新套接字,每次代表来自客户端的全新 TCP 连接。
关于c++ - Winsock - 重新连接客户端到服务器 - 10061,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496300/