[原创]也谈PORT与PASV模式


PORT模式与PASV模式的区别就是ftp传输通路链接中数据传输建立时的模式.

PORT模式是服务器端初始化连接,而PASV模式是客户端初始化连接

服务器端一旦启动实例化两个有固定端口号的socket,控制sControlSocket端口为21,数据sDataSocket端口比如指定为1650

主线程:控制端口sControlSocket.Accept()一直监听是不是有客户端试图建立连接。。。。。。
对应的cSocket = sControlSocket.Accept()
这样服务器端的cSocket就建立了一个与客户端的连接
开始了通讯
对应这个cSocket和客户端的通讯是新开的一个子线程
通讯具体(客户端的clientSocket)
1。clientSocket.Connect(ep);//ep为sControlSocket----C
2。cSocket [i]= sControlSocket.Accept()----S
3。clientSocket.Send(...USER ~~~-----C
4。while(true){cSocket[i].Receive(~~~存字符串str}
      判断str.StartWith("")->USER
      如果数据库存在这样的USER发送220 test ----S
5。clientSocket.Receive(..如果前三个字符串是以220为开始
      clientSocket.Send(.. PASS ~~~-----C
6。第4步中,判断str.StartWith("")->PASS
      如果数据库中对应第4步的USER,这个PASS也相同,发送220    test ----S
7。clientSocket.Receive(..如果前三个字符串是以220为开始
      clientSocket.Send(.. PASV ~~~-----C
8。第4步中,判断str.StartWith("")->PASV
       PASV是一种被动模式,就是服务器端接收到客户端的PASV命令后先cSocket[i]发送比如:150。(。。7,18),这样客户端就知道服务器开启了7*256+18的数据端口,同时sDataSocket.Accept ()等待,如果客户端去连接(客户端已经知道了去连20端口,就实例化一个新的socket),就有cSocket[j] = sDataSocket.Accept(),这样对于一个客户端就有两个socket通讯了,这时cSocket[j].Send(结果,然后服务器的cSocket[j]循环判断,如果sDataSocket的连接断开就cSocket[i].send(220。。。,客户端收到需要的结果就关闭数据连接。 至此PASV模式结束

初始化100个连接客户端的控制cSocket,100个连接客户端的数据传输cDataSocket

只要一个sSocket 绑定一个本地服务器终结点,开始监听
 |
 |
 |
创建一个主线程中做处理:
 |
 |
 |
循环执行下面的程序:
 |
 |
 |
以下的代码块为一个临界区
 |
 |
 |
sSocket一直在监听,得到一个可用的cSocket,用cSocket把监听到的请求连接上
创建一个子线程用于处理一个客户端的具体ftp请求
 |
 |
 |

WinSock 2.0
Connecting to 202.114.99.37
Connected to 202.114.99.37 -> IP=202.114.99.37 PORT=21
220-FTP Server ready...
220-来自 219.140.95.44 的用户,欢迎您访问 未来FTP (ftp://movie.future.org.cn)。
220-
220-服务器已经连续工作了 13 天 21 小时 51 分 18 秒。
220-未来FTP 本次启动以来共有 578512 次连接。过去 24 小时总共有 2896 次连接。
220-用户成功登陆 34619 次。总计上传 10849053 KB,下载 462204672 KB。
220-
220-目前的流量为269.758 Kb/sec,有 16 位使用者在线。
220-
220-匿名用户只有List权限,依旧提供无积分账号。
220-
220-用户名和密码为论坛的用户和密码
220-小于3积分的用户:1线程,每线程50K/s;
220-3~5积分的用户:2线程,每线程75K/s;
220-6~14积分的用户:3线程,每线程100K/s;
220 大于14积分的用户:5线程,不限速。
USER wwwroot
331 ServUSharp v1.04正在验证身份,用户名正确,请提供密码。
PASS (hidden)
230 User logged in, proceed.
SYST
215 UNIX Type: L8
REST 100
350 Restarting at 100. Send STORE or RETRIEVE.
REST 0
350 Restarting at 0. Send STORE or RETRIEVE.
PWD
257 "/" is current directory.
TYPE A
200 Type set to A.
PASV
227 Entering Passive Mode (202,114,99,37,9,116)
LIST
150 Opening ASCII mode data connection for /bin/ls.
226 Transfer complete.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值