FTP协议数据连接问题(200分)

  • 主题发起人 主题发起人 brightangel
  • 开始时间 开始时间
B

brightangel

Unregistered / Unconfirmed
GUEST, unregistred user!
FTP工作时一般使用两个连接,一个用于控制,一个用于数据传输。
一般情况下数据连接是动态创建和释放的,当从同一站点多次传输数据时,
每次传输都要创建和释放一次连接,这样显得很麻烦。我想为所有的数据
传输建立一次连接,就像控制连接一样,不知道行不行?
另外,我还尝试过对每次数据传输,在PORT命令中指定相同的端口,但只有
第一次传输正常,后面的数据传输请求都没有响应,为什么?
请高手指教,不胜感激!
 
我也遇到同样的问题,我用的是idftp。
问题:如何能将port限定死。
 
在Port命令中指定相同的端口

如果你有两个线程传输呢?

怎么办?

这是FTP协议的内容

在非PASV模式下
客户机每次随机挑选一个端口监听
然后将信息发送给服务器
服务器根据相应信息连接并发送数据
客户机: PORT xxx,xxx,xxx,xxx,6,13
服务器: 200 PORT Command successful.
这里由客户机给出连接信息,服务端接受
Port指令并不是随便给的
而是随即挑选一个空闲端口并进行监听的Socket建立以后给出的
如果你要重复使用某个端口,你需要自己写Client,并且保证固定的端口随时可以使用

而在PASV模式下,数据传输连接由服务器建立,客户机连接
客户机: PASV
服务器: 227 Entering Passive Mode (xxx,xxx,xxx,xxx,15,4)
这里服务器给出了连接信息给客户机,客户机连接上就可以进行数据传输

 
rustle你就错了,被动模式下,客户端打开一人SOCKET侦听,可以给很多个CLIENT连接的呀,
所以就不存在你所说的情况。

我想是brightangel的TSERVERSOCKET代码问题,你没有考虑多个CLENT连接过来时接收数据的
情况。
 
这样说没有意思

我们要搞清楚搂主到底是要写Client还是Server

在非PASV模式下
而且你如果以TServerSocket的方式在指定端口监听的话
还是每次数据传输用了一个连接
只不过被TServerSocket管理起来了
这不是他的本意

在PASV模式下
如何连接又是由服务器所控制
还是不能完成楼主的要求

实际上这是楼主的要求是不可能完成的
因为FTP的数据传输连接并没有发送任何标志信息的
传输结束与否完全是由连接是否断开来标志的
断开了就表示传输完成了
肯定是要断开重连的
 
谢谢各位,看来用同一个连接来传输所有数据是不行的了!
我是做的一个Client!
开始时创建控制Socket和监听Socket,控制Socket与FTP服务器相连。
然后循环的做如下工作:
用PORT命令告诉服务器我的监听Socket的端口
命令服务器传送数据
Accept监听Socket建立数据连接,接收数据!

在循环体中,每次给出的PORT命令相同,
结果只有第一次循环得到数据,后面的都失败!
这就是我关于PORT指定相同端口的问题,请各位高手指教?
 
Ftp协议是这样的,自己修改协议,
或者自己定义协议
 
这个问题应该可以解决的,下面是我找的资料:

3.3. 数据连接管理
默认数据连接端口:所有FTP必须支持默认数据连接,只有用户PI能够初始化非默认端口的使用。

确定非默认数据端口:用户PI可以使用PORT命令指定非默认端口,它要求服务器方以PASV确定非
默认数据端口。连接是由双方地址确定的,因此改变一方地址就改变了连接。

数据连接的重用:在使用流式数据传输模型时,文件结束通过关闭连接指示。如果要传送多个文
件时就会出麻烦,解决的方法有两个,一个是确定非默认端口,另一个是使用另一种传输模式。就
传输模式而言,流传输模式是不安全的,因此无法确定连接是暂时还是永久关闭。其它传输模式不
通过关闭连接表示文件结构,它们可以通过FTP命令决定传送结构。因此使用这些传输模式可以在
保持连接的情况下传送多个文件。

上面的资料说得很清楚啦,我现在继续在解决些问题。

 
由于SERV-U不支持MODE B,所以没有办法研究其原因了。
http://www.longen.org/E-K/detaile~k/FTP.htm

这个网页说得很详细了,希望对有用。
还有不知有什么服务器软件支持块模式?
 
多人接受答案了。
 
后退
顶部