FTP Port模式使用的问题

chzhk007 2009-04-29 11:46:58
FTP 客户端使用Port命令建立TCP数据连接后,我想重用现有的socket和port,继续接受数据,但是只有第一次成功,后面的总失败,不知道是何原因,难道每次接受数据完毕后服务器会关闭数据连接吗?
...全文
453 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
udknight 2009-06-18
  • 打赏
  • 举报
回复
被port模式折腾了很久,最后改pasv模式了。
liu_yi_shanghai 2009-06-18
  • 打赏
  • 举报
回复
我也正在写FTP主动模式。我发现不同的服务器处理不一样。
Serv-U的服务器PORT命令发一回就可以了。
IIS的服务器每回收了数据后就必须重新发PORT。
具体为什么不是很清楚。
linyu1247 2009-06-11
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lovejklife 的回复:]
主动模式没用过

我的理解
每个数据连接都需要ACCEPT的,不可以在同一端口上建立多个数据连接,必须close再accept,要同时建立多个数据连接要Create多个Socket
              Send Port command->Send "List" command

Create Listen Socket->bind port->Listen->Accept->Receive->close->
                                            |                    |
                                            --------- <---…
[/Quote]
port模式的话 ftp服务器端不多是用20端口来进行数据连接吗?那不就是一个端口建立了多个数据连接,我查看服务器端口看到很多的20端口处于wait状态,过一段时间就被回收了。建议您多了解一下ftp的pasv和port模式的工作原理。
lovejklife 2009-05-09
  • 打赏
  • 举报
回复
主动模式没用过

我的理解
每个数据连接都需要ACCEPT的,不可以在同一端口上建立多个数据连接,必须close再accept,要同时建立多个数据连接要Create多个Socket
Send Port command->Send "List" command

Create Listen Socket->bind port->Listen->Accept->Receive->close->
| |
---------<----------
chzhk007 2009-04-29
  • 打赏
  • 举报
回复
我有个实际的应用项目,就是先拿FTP server的文件/目录列表。
然后针对每个子目录,拿它的文件列表。
所以数据连接肯定不是只用一次。

第一次是这么用的:
Create Listen Socket->Listen->Send Port command->Send "List" command->Accept->Receive

数据接收完毕后,我想继续发送"List 目录"命令去拿子目录下的文件列表,重用已经建立好的socket 和port,接收数据。可是接收的都是0字节的。

另外, 如果每次都是重新建立socket,象下面的那样,到是没问题,
Create Listen Socket->Listen->Send Port command->Send "List" command->Accept->Receive
但这样做并不是一个很好的解决方案。
因为如果子目录有上万个,那得重新建立上万个的新的socket和port,这种做法肯定是比较愚蠢的。
yearn520 2009-04-29
  • 打赏
  • 举报
回复
你所说的一次是什么意思?代码
biweilun 2009-04-29
  • 打赏
  • 举报
回复
我这边有个源代码给你参考下看看:http://www.brsbox.com/filebox/down/fc/3b9ac7f3f3fc71c6282e376864d46ae7
wutaihua 2009-04-29
  • 打赏
  • 举报
回复
这个问题可能比较复杂,我当时为了写一个服务器,用了我2个星期还多。后面就是调试。我的经验就是你竟然是写的客户端,可以找个开源的服务器端来比较,调试。这样,比你这样整要好一些。对照着来。我当时也是这么搞的。
wutaihua 2009-04-29
  • 打赏
  • 举报
回复
连接是重新建立和收回的,你可以做一个socket的管理机制,不用了,就收回port啊。而且你看看客户端和服务器端的连接,并不是有一万个目录,就直接传10000个吧。而是分开发送的。

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧