我以为我会为此开始一个新问题。 我有一个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错误。
(如果我从服务器端断开连接并收听新端口就没问题了)
谢谢!!!
答案 0 :(得分:1)
您正在使用s
的结果覆盖您的侦听服务器套接字 accept()
,即连接的套接字。这是完全错误的 - 你应该重新使用你调用listen()
的同一个服务器套接字来进行accept()
的所有后续调用,每次调用时都会给你一个 new 套接字表示来自客户端的全新TCP连接。