如何实现FTP客户端PORT功能? (100分)

  • 主题发起人 主题发起人 990
  • 开始时间 开始时间
9

990

Unregistered / Unconfirmed
GUEST, unregistred user!
如何给TServerSocket指定一个系统不用的空闲端口?
就象FTP客户端程序处于NO Passive时,每次建立数据
连接都使用不同的端口。
 
自动寻找一个不用的Port,一个一个搜索就是了.连接不上的就是空的
 
任何一个Socket连接都会使用不同的端口
监听端口一般是向客户端公开的,不可能随便变的
 
我的问题是需要做一个类似FTP数据连接的控件。过程是由客户端建立一个simple服务,
然后客户端将端口告之服务器,再由服务器连接到客户机。这和FTP的非Passive方式下
的数据传输很相似!所以我想借用FTP方式写这个控件。
 
查看winnt/system32/driver/etc/services(win2k,其他系统查找services文件可以找到,
只是位置不同)文件,可以看到所有的端口值
 
to chenxz: 你看清楚问题了吗?
 
把分给我吧,我查了些资料,又看了Ftp客户端的源代码
其实方法很简单
如果用的是 TServerSocket
将 Port属性设为0
然后Active := True 开始监听

再读取ServerSocket1.Socket.LocalPort
就可以获得监听的端口了(可能是操作系统自动寻找空闲的端口,并且每次都不一样)
把这个端口发送给对方就可以了

已经测试通过
 
哪个端口应该是系统自己分配的,你只关心监听的哪个端口,哪个是固定的,客户端向哪个断口发出一个请求
服务器就把本第一个自由端口拿来和客户端通信,自己则继续监听,好象自由端口的分配规则是
从1025开始,递增,碰到已被使用的端口也递增
 
谢谢,以后有问题再向你请教!
 
后退
顶部