FTP是如何工作的
FTP是基于客户-服务器模型而设计的。客户和服务器之间利用TCP直接连接。与其它客户-服务器模型不同的是:FTP客户与服务器之间是要建立双重连接:一个是控制连接,一个是数据连接。建立双重连接的原因在于FTP是一个交互会话系统,某客户每次调用FTP,便与服务器建立一个会话,会话以控制连接来维持,直到退出FTP。控制连接负责传输控制信息,尤其是客户客户命令(比如文件传输命令等等)。利用控制命令,客户可以向服务器提出无数次的请求(一个客户命令就是一个请求)。客户每提出一个请求,服务器再与客户建立一个数据连接,进行实际的数据(比如文件)传输。一旦数据传输完成,数据连接会话就被撤销,但控制连接依然存在,客户可以继续发出命令。直到牢记键入CLOSE命令撤销控制连接,再键入QUIT退出FTP会话。此时双方控制进程就不再存在了。
FTP连接的建立
在一个FTP会话中,需要建立一个控制连接和若干个数据连接。
建立控制连接的过程大家都很熟悉。FTP服务器的公认端口是21。客户控制进程申请一个随机分配的本地端口后,用常规的方法可以与服务器端口21建立一个连接。
数据连接的建立就没有那么简单了。在建立数据连接的过程中,客户控制进程反客为主,成为连接的接收者,而服务器数据传输进程成了连接的请求者。作为一个新的子进程,服务器传输进程可以申请一个新的端口号来建立自己的相关连接(一般是利用FTP的保留端口号20),而它向哪个客户端口发送连接请求呢?要知道客户是没有公认端口的,这时就要利用到控制连接,客户控制进程通过控制连接告知服务器进程自己的数据连接端口号,服务器控制进程将它转告自己的数据传输进程,服务器数据传输进程便可以利用它与客户建立数据连接。
FTP命令集
“!”或者“*SYSCMD”:用户可以在FTP模式中执行本地AS/400的命令。在实际工作中,这一命令非常有用,你不用退出FTP模式就可以直接执行本地AS/400的命令。
“DIR”:列出远程AS/400某个目录中的FILES和MEMBERS。若你执行了“PUT”操作,用“DIR”命令查看是否将文件传到了远程AS/400中。
“PWD”:列出远程系统的当前目录中的FILES和MEMBERS。
“LPWD”:列出本地系统的当前工作目录中的FILES和MEMBERS。
“PUT”:将文件从本地系统发送到远程系统。
“MPUT”:将多个文件从本地系统发送到远程系统。
“GET”:从远程系统传文件到本地系统。
“MGET”:从远程系统传多个文件到本地系统。
“ASCII”:改变到ASCII模式。
“BINARY”:改变到BINARY模式。
“EBCDIC”:改变到EBCDIC模式。
特别注意:将含有数值类型的文件从AS/400发送到ASCII系统时,应将文件中的数值字段改为ZONED类型,而不是PACKED类型,否则将发生不可预测的结果。
“RENAME”:更改远程系统中的文件名。
“QUOTE”:执行远程服务器端的命令而不用重新登录远程系统。
“LCD”:改变本地系统的当前目录。
“CD”:改变远程系统的当前目录。
“CDUP”:进入远程系统的父目录。
“LOCSTAT”:显示本地状态信息。
配置AS/400 FTP服务器
用户要配置AS/400 FTP服务器中,需要有*IOSYSCFG特权。
A、配置TCP/IP。
B、修改FTP属性。 命令是CHGFTPA(对QUSRSYS/QATMFTP.CONFIG数据库文件进行修改)。
主要参数说明:
Autostart Servers : 当Autostart Servers为*YES时,一旦TCP/IP启动,FTP服务器也将自动启动。
Number of Initial Servers: FTP服务器初始启动数量。根据FTP的流量而定,初始值为3一般就足够用了。
Inactivity Timeout: 指出FTP客户端与服务器端在多少秒没有交互后,连接将自动断开。缺省值为300秒(5分钟)。
Coded character set identifyier: 缺省值为00819,所有被传入的ASCII字符将被翻译成EBCDIC 500代码页。也可以制定你自己的转换表。
Initial name format: 缺省值为*LIBL,将所有FTP服务器的命名形式设为NAMEFMT=0;若此值为*PATH,则NAMEFMT=1。
Initial directory: 缺省值为*CURLIB,以登录FTP服务器的用户的当前目录为FTP会话的当前目录;若此值为*HOMEDIR时,FTP会话的目录以用户简要表的HOMEDIR参数为准。
New file CCSID: 指定用户FTP创建文件的CCSID值。
启动与停止FTP服务器
手工启动FTP服务器,在AS/400命令行输入:
STRTCPSVR *FTP
手工停止所有FTP服务器,在AS/400命令行输入:
ENDTCPSVR *FTP
注意:
因为直接用ENDTCPSVR *FTP命令停止FTP服务器,用户可能会丢失数据,为了保证用户不丢失数据,应该按照以下步骤进行处理:
A、在AS/400的命令行输入:
WRKACTJOB SBSD(QSYSWRK)
查找是否有QTFTPxxxxx(xxxxx代表5位数字)存在,若没有,则可以执行ENDTCPSVR *FTP命令;若有,则黑心做下一步。
B、确保没有用户登录FTP服务器。在AS/400的命令行输入:
NETSTAT *CNN
查找是否有LOCAL PORT为 FTP-CON状态为ESTABLISHED的连接存在,若没有则可以执行下一步;若有,应该等等用户的FTP结束后再执行下一步。
C、在AS/400的命令行键入:
ENDTCPSVR *FTP
批方式FTP
FTP被设计为交互式TCP/IP应用,但AS/400也支持FTP批处理方式。
FTP批处理方式应该按照如下步骤来进行:
3.2.5 创建一个CL程序来启动FTP。
3.2.5 创建一个含有所有交互方式FTP命令的源物理文件的成员。
3.2.5 提交批作业运行这个CL程序。
3.2.5 检查结果。 |