FTP 数据连接重用

2024-02-27

我正在开发一个 FTP 客户端,并试图了解数据连接的工作流程。

据我了解,最初的(command)连接是永久的,直到您退出为止。但是,我不确定数据连接 - 是否按命令重新启动?所以你打电话PORT ... or PASV,获得第二个连接,执行LIST,得到结果,连接关闭,重新开始?

另外,需要打电话吗PASV (or PORT ...)在每个连接关闭后再次?似乎当我尝试使用被动连接测试某些内容时,在第一个命令返回结果并关闭数据连接后,我无法重新连接到同一端口。我可以继续打电话PASV-> 数据连接 -> 运行命令 -> 获取结果 -> 数据连接关闭 ->PASV,但似乎这不是它应该如何运行?

另外,如果有人在 FTP 上有比 RFC 更简洁的好材料,我真的很感激。


您每次都必须打开一个新连接。这只是连接的关闭,您(或服务器)如​​何知道传输已完成(至少在常见的“流模式”下)。

您甚至不能重复使用本地/远程端口号组合,因为当 TCP 连接关闭时,它会进入 TIME_WAIT 模式,并且端口号组合在一段时间内无法使用。因此,对于两个立即连续的传输,您无论如何都必须使用不同的端口号组合。

参考RFC 959 https://datatracker.ietf.org/doc/html/rfc959,第 3.3 节。数据管理:

数据连接的复用:使用数据流模式时 传输文件的结尾必须通过关闭来指示 联系。如果要处理多个文件,这会导致问题 在会话中传输,由于 TCP 需要保存 超时期间连接记录,保证可靠 沟通。因此无法立即重新打开连接。

这个问题有两种解决方案。第一个是 协商非默认端口。第二种是使用另一个 传输模式。

对传输模式的评论。流传输模式为 本质上是不可靠的,因为人们无法确定 连接是否提前关闭。其他传输方式 (块,压缩)不关闭连接以指示 文件末尾。他们有足够的 FTP 编码来传输数据 可以解析连接以确定文件结尾。 因此,使用这些模式可以使数据连接保持打开状态 用于多个文件传输。


也可以看看:

  • 为什么 FTP 被动模式需要一个端口范围而不是仅一个端口? https://serverfault.com/q/270745/168875#793283
  • 在 NAT 后面运行的 FTPS 服务器需要多少个数据通道端口? https://serverfault.com/q/709984/168875
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FTP 数据连接重用 的相关文章

  • 使用.net 2.0 连接到 FTP 服务器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望连接到现有的 FTP 服务器 上传文件 等待服务器生成报告 然后将该报告下载回 VB NET 2
  • Curl 同时下载和上传同一文件

    不确定是否可能 但我一直在尝试使用curl 从 HTTP 位置下载文件并将其输出到 FTP 服务器上 如果这实际上可能的话 我真的很希望得到一些帮助 curl http example com down curl T ftp mysite
  • 使用自动 bash 脚本检查 FTP 中是否存在文件

    我想自动化执行以下操作的批处理作业 检查我的file txt存在于FTP服务器中 我将其重命名为file trt 检查我的file txt and file trt存在 如果存在我发送电子邮件 我运行另一个脚本 最后我删除file trt
  • C# FileSystemWatcher 和 FTP

    我通过文件系统观察器监视在 ftp 上删除的文件 然后移动到另一个目录 现在我触发文件系统观察程序的创建事件的复制 但显然在 ftp 的情况下 创建只是一个存根文件 数据会进入并在上传时填充文件直至完成 任何人对此都有一个优雅的解决方案 或
  • FTPWebRequest .NET 3.5 与 4

    我有一个应用程序可以与 IBM 大型机建立 FTP 连接 并且一切都工作正常 然后 我针对 NET 4 重新编译 主机不再接受该文件 并给出一条错误消息 指出该文件不存在 或者我没有该文件的权限 这是我用来发送文件的 Ftp FtpWebR
  • 使用PHP通过FTP递归扫描目录和子目录

    我正在尝试创建目录中所有文件 及其大小 的列表 包括子目录中的所有内容 这些文件位于远程服务器上 所以我的脚本通过 FTP 连接 然后使用以下命令运行递归函数ftp chdir浏览每个目录 如果有其他方法可以做到这一点 我愿意接受建议 fl
  • php ftp 检查文件夹是否存在总是返回创建文件夹错误

    有人可以告诉我这段代码中做错了什么吗 if id if is dir public html tem pasta path pics id echo pasta j existia destination file public html
  • C# 单文件FTP下载

    我试图在 C 控制台应用程序中使用 FTP 下载文件 但即使我知道路径是正确的 我总是收到错误消息 550 file not found 有什么方法可以返回当前路径 一旦连接到服务器 lade datei von FTP server st
  • 使用 PowerShell 在 IIS FTP 站点上设置权限和设置

    我是 PowerShell 的初学者 我尝试了这个脚本并且运行良好 但我需要将 FTP 授权规则更改为 所有用户 读 写 并将 FTP 用户隔离 更改为 用户名目录 NEEDED FOR IIS CMDLETS Import Module
  • Indy FTP 传输类型

    我正在使用 IdFTP Indy 10 组件从远程位置下载一些文件 zip 和 txt 在获取每个文件之前 我将 TransferType 设置为二进制 IdFTP TransferType ftBinary IdFTP Get ASour
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque
  • FTP 下载冻结整个应用程序

    我正在尝试从 FTP 服务器下载一个大约 100 MB 的文件 这是一个测试 bin 文件 因为我正在测试该应用程序 我猜我将来想要下载的文件会更重 当我想下载文件时 整个应用程序就会冻结 几秒钟后它就会下载文件 该文件已完成 并且已成功下
  • 使用 boto3 和 ftplib 将文件从 FTP 复制到 S3 存储桶失败,并显示“500 语法错误,命令无法识别”

    我需要将数据从 FTP 服务器发送到 S3 存储桶 而不将文件保存到本地驱动器 在互联网上 我发现我们可以使用io BytesIO 作为缓冲区 但我的代码失败了 error perm 500 语法错误 命令无法识别 剧本 ftp ftpli
  • 使用ftp协议连接密码包含“@”符号的服务器

    我正在尝试使用java中的FTP协议从服务器下载文件 通过使用以下 URL 我可以连接到服务器并下载文件 URL url new URL ftp user password host remoteFile type i 但是当我的密码包含
  • 检查 FTP 文件夹是否存在任何与掩码匹配的文件的批处理文件

    我需要创建一个批处理文件来访问受保护的 FTP 站点 检查文件类型 txt 存在 如果存在则进行下一步 如果不存在则返回0并结束作业 我进行了广泛的搜索 但找不到任何解决方案 这不是一项简单的任务 特别是当您需要检查与掩码匹配的文件 而不是
  • 无法从本地文件夹运行 Jquery

    你好 我是网络开发新手 我需要与JQuery 即使我已经成功尝试过一个jquery但仅在将文件复制到我的在线 ftp 文件夹后 我完全无法从本地文件夹运行它 请解释一下 如何我可以测试一些新脚本吗 进行额外的练习将文件复制到 ftp 文件夹
  • 尝试使用 FTP_TLS 从同一目录下载第二个文件时出现“ftplib.error_perm:550 不允许操作”

    运行我的脚本时出现此错误 ftplib error perm 550 Operation not permitted ftpdownloader py import ftplib import threading import loggin
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • Jenkins - 如何将文件夹/文件从 Jenkins Linux 代理部署到 Windows 服务器?

    构建完成后 我将得到包含文件的构建文件夹 我需要将它们复制到远程 Windows 服务器 我尝试使用 通过 FTP 发布 插件但似乎 该插件可供采用 因此 根据公司政策 无法安装此功能 https plugins jenkins io pu
  • 备份并上传到FTP服务器[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 谁能指导我一个脚本解决方案来备份目录并将其上传到 ftp 服务器 我最初正在寻找批处理脚本 但任何解决

随机推荐

  • 编译 SASS 时出现预期换行错误

    我遇到的问题是我的 SASS 无法编译并且它向我显示相同的错误 Expected NewLine topper h3 text align center text decoration underline list group active
  • 在自定义 keras 损失中使用 keras 模型

    我有一个名为的常规 keras 模型e我想比较两者的输出y pred and y true在我的自定义损失函数中 from keras import backend as K def custom loss y true y pred re
  • (iPhone) selectedRange 用于不可编辑的 UITextView (或其他点击处理方法?)

    我正在使用一个UITextView保存静态内容 中文意思是字符都是固定宽度的 我想让用户单击文本中的某个字符并显示该字符的字典信息 我知道所有与缺乏复制和粘贴相关的问题 但我希望有一种方法可以做到这一点 而无需等待 iPhone 3 0 固
  • 是否有可能在源代码中抑制 sonarcloud 的警告?

    我面临一些声纳云警告的问题 这些警告在最近的将来不会得到解决 现在应该被禁用 这些警告是由 sonarcloud 在 CI 构建过程中发出的 没有任何本地分析器 有没有办法在项目 文件 类和 或方法级别上抑制源代码中的某些特定警告 官方文档
  • 在 NativeModules 中添加对象

    我想用https github com dgladkov react native image rotate https github com dgladkov react native image rotate在反应本机项目中 我用它下载
  • Java JTextPane RTF 保存

    我有以下代码尝试将 JTextPane 的内容保存为 RTF 虽然下面的代码创建了一个文件 但它是空的 关于我做错了什么有什么建议吗 像往常一样 不要忘记我是初学者 if option JFileChooser APPROVE OPTION
  • 在python中计算直方图峰值

    在Python中 如何计算直方图的峰值 我试过这个 import numpy as np from scipy signal import argrelextrema data 0 1 2 3 4 0 1 2 3 4 0 1 2 3 4 1
  • 如何在Python中将元组转换为多层嵌套字典?

    我有一个以下格式的元组 639283 298290710 1385 639283 298290712 1389 639283 298290715 1395 745310 470212995 2061 745310 470213821 371
  • 将 MySql 从 Windows 服务器迁移到 Linux

    从旧的 Win2003 服务器迁移到新的 VM 服务器 我们选择 Win 或 Linux 如果我们使用 Linux 转换当前表会有任何问题吗 将 MySQL Windows 迁移到相同版本的 MySQL Linux 您可以按如下方式 mys
  • 不可变对象的真正好处是什么

    我总是听到人们说 在使用多个线程时管理不可变对象更容易 因为当一个线程访问不可变对象时 不必担心另一个线程正在更改它 那么 如果我有一个公司所有员工的不可变列表并且雇用了一名新员工 会发生什么情况 在这种情况下 必须复制不可变列表 并且它的
  • 从 T-sql 设置肥皂请求属性

    下面是我用来连接到我的 api 服务器的代码 对于其他调用来说一切正常 但是当涉及到上传图像时 它就不起作用了 如果我将代码复制到 SoapUI 并从那里运行 它确实可以工作 但在 SoapUI 中我必须将请求属性 启用内联文件 更改为 t
  • 如何将 Metal Performance Shader 与 MTLBlitCommandEncoder 同步?

    我试图更好地理解使用时的同步要求Metal Performance Shaders and an MTLBlitCommandEncoder 我有一个MTLCommandBuffer设置如下 Use MTLBlitCommandEncode
  • PHP 在特定字符处剪切字符串

    string aaa bbb ccc ddd eee fff 我想在第三个之后剪切字符串 所以我想从字符串中获取输出 aaa bbb ccc 您可以使用strpos and substr 为了这 看 http php net strpos
  • 反转 3D 旋转,使物体始终面向相机?

    我有很多排列在 3D 空间中的精灵 并且它们的父容器应用了旋转 我如何反转精灵 3D 旋转 使其始终面向相机 Actionscript 3 这是一个测试它的代码 package import flash display Sprite imp
  • 使用 JSFuck 约定访问 RegExp

    我想替换字符串中的一些字符 例如 console log truefalse replace e E 但使用jsfuck https kamil kielczewski github io jsfuck index html约定只允许 6
  • 实体框架保存更改

    只读操作后是否需要保存更改 实体已加载到缓存 但没有任何更改 是否应该在处置之前调用保存更改 From doc DbContext SaveChanges https msdn microsoft com en us library sys
  • Session_End 不触发?

    我想在用户会话超时时注销该用户 因此在 Global asax 中使用了以下代码 protected void Session End object sender EventArgs e FormsAuthentication SignOu
  • 如何在 ASP NET MVC 6 中更新模型?

    场景 如何更新模型 ASP MVC 6 我正在尝试更新模型 为了将模型信息传递给客户端 浏览器 应用程序 我使用 DTO 问题1 为了更新 我应该将整个对象发回吗 问题2 有没有办法可以轻松地只传递更新的信息 如果是 怎么办 问题3 我可以
  • 通过子进程将python的文件类对象传递给ffmpeg

    我有一个 django FileField 用于在 Amazon s3 服务器上存储 wav 文件 我已经设置了 celery 任务来读取该文件并将其转换为 mp3 并将其存储到另一个 FileField 我面临的问题是我无法将输入文件传递
  • FTP 数据连接重用

    我正在开发一个 FTP 客户端 并试图了解数据连接的工作流程 据我了解 最初的 command 连接是永久的 直到您退出为止 但是 我不确定数据连接 是否按命令重新启动 所以你打电话PORT or PASV 获得第二个连接 执行LIST 得