c++ - Winsock - 重新连接客户端到服务器 - 10061

标签 c++ sockets winsock winsock2

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

相关文章:

c++ - 通过网络发送和接收<vector>数据

java - 如何在java中使用TCP/IP将相同的数据从服务器发送到所有客户端?

c++ - 在 TCP 客户端上接收数据包中的数据

networking - 使用winsock扫描局域网游戏服务器

c++ - 读取文本文件并随机播放

c# - ZeroMQ C#HelloWorld示例

node.js - 为什么我使用 Socket.IO 将 NodeJS 服务器 (Sails) 与另一个 NodeJS 服务器 (Express4) 的连接失败?

c++ - 为 Unicode 和 ANSI 重载 toString

c++ - 方括号和圆括号运算符,如何选择重载?

c++ - 在结构中定义 vector 的长度