Visual c++ 如何保持插座带电

Visual c++ 如何保持插座带电,visual-c++,network-programming,tcp,Visual C++,Network Programming,Tcp,我们正致力于Filezilla客户端和Filezilla服务器之间的通信,它们之间有两个代理。在两个代理之间,我们有两个tcp连接 filezilla客户端->P1--2---P2->filezilla服务器 我们遇到的问题是,上载filezilla客户端会将整个数据发送到P1,P1会将数据发送到P2。但是p2recv。速度不如P1发送速度快。P1将在一段时间后关闭连接,但由于P2仍在尝试从P1接收数据,因此无法接收数据,因此将失败 有没有办法让soket保持活动状态,直到另一端完全接收数据 我

我们正致力于Filezilla客户端和Filezilla服务器之间的通信,它们之间有两个代理。在两个代理之间,我们有两个tcp连接

filezilla客户端->P1--2---P2->filezilla服务器

我们遇到的问题是,上载filezilla客户端会将整个数据发送到P1,P1会将数据发送到P2。但是p2recv。速度不如P1发送速度快。P1将在一段时间后关闭连接,但由于P2仍在尝试从P1接收数据,因此无法接收数据,因此将失败

有没有办法让soket保持活动状态,直到另一端完全接收数据

  • 我尝试过使用具有不同超时选项的Linger。但它并没有处理所有的场景

  • 我已尝试将套接字选项设置为keepalive,但仍然存在相同的问题


  • 任何人都可以帮助我或给我一些建议吗?

    当P2从另一端接收到连接已关闭的信息时,它应该在从其一端关闭连接之前读取套接字中的剩余字节。

    感谢所有人在此线程上的贡献,使用关机功能解决了问题。

    问候
    Nidhi

    这不应该发生。FTP基于一对TCP连接。TCP有一个内置的流量控制机制——端点将调整其窗口大小,以防止链路的任何部分过载。只要代理在交换一些数据,就不应该丢弃套接字。P1的客户端子系统为什么关闭套接字?它生成了什么错误/状态消息/日志?P1有两个套接字,例如,在上载一个带有filezilla客户端的套接字(sock1)和一个用于向P2发送数据的套接字(sock2)的情况下。一旦完成向P2发送数据,它将关闭套接字sock1和sock2,因此P1和P2之间的通信通道中断,导致文件传输失败。P2将仅读取剩余数据,直到套接字超时。例如。。如果我们给出了5秒超时的延迟,P2将读取数据到5秒,然后关闭连接,。。它不会读取P1发送的全部数据。@Nidhi,禁用系统执行的自动连接关闭(玲儿)。当没有更多的数据要读取时,请关闭代码。如果我在P1级别保持套接字打开,并尝试在P2级别获取整个数据,我如何确保在P2级别上已使用P1发送的所有数据,我在P2级别获取数据,但套接字在P1级别保持打开状态,导致无法在filezilla中检索目录列表本身(即,我无法连接到filezilla服务器本身)。我不理解这个问题。试着说得更清楚些,也许用不同的词。这就是我对系统的理解:P1发送所有数据并关闭套接字。P2将从P1检测到此关闭,但在首先接收到所有数据之前不应关闭其连接端。