FTP(文件传输协议)是TCP/IP中使用最广泛的应用之一,AS/400中的TCP/IP支持各种局域网、广域网连接类型:Ethernet、Token-Ring、SDDI、Wireless LAN、X.25 SVC 、PVC和Frame Relay。所有的计算机系统都非常重视文件操作,AS/400系统也不例外,本文件讨论FTP的理论、FTP的配置、FTP命令集和在AS/400上如何使用FTP。
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 PTF服务器
用户要配置AS/400 PTF服务器,需要*IOSYSCFG特权。
1.配置TCP/IP。
2.修改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 identifier: 缺省值为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服务器,用户可能会丢失数据,为了保证用户不丢失数据,应按照以下步骤处理:
1. 在AS/400的命令行输入:
WRKACTJOB SBS(QSYSWRK)
查找是否有QTFTPxxxxx(xxxxx代表5为数字)存在,若没有,则可以执行ENDTCPSVR *FTP命令;若有,则应执行第二步。
2. 确保没有用户登录FTP服务器。在AS/400的命令行输入:
NETSTAT *CNN
查看是否有LOCAL PORT 为FTP-CON状态为ESTABLISHED的连接存在,若没有则可以执行第三步;若有,应等待用户的FTP结束,在执行第三步。
3. 在AS/400的命令行输入:
ENDTCPSVR *FTP
STRTCPSVR *FTP
也可以通过“操作导航器”(OPERATION NAVIGATOR)来实现FTP服务器的启动/停止:
1. 打开“操作导航器”,路径“Network"Servers"TCP/IP”。
2. 用鼠标右键点击“FTP SERVER”。
3. 来实现FTP服务器的启动/停止。
批方式FTP
FTP被设计为交互式TCP/IP应用,但AS/400也支持FTP批处理方式。
FTP批处理运行方式,应按照以下步骤进行:
1. 创建一个CL程序来启动FTP。
2. 创建一个含有所有交互方式FTP命令的源物理文件的成员。
3. 提交批作业运行这个CL程序。
4. 检查结果。
下面具体讨论一个例子来说明批方式FTP:
1. 创建一个CL程序
使FTP命令可以运行在批方式下。
CHGCMD CMD(QSYS/FTP) ALLOW(*ALL)
将交互输入方式改为批方式,从源物理文件成员(FTPCMDS)得到FTP命令,将FTP消息发往源物理文件成员(FTPLOG) OVRDBF FILE(INPUT) TOFILE(PFEIFFER/QCLSRC) MBR(FTPCMDS)
OVRDBF FILE(OUTPUT) TOFILE(PFEIFFER/QCLSRC) MBR(FTPLOG)
在CL程序中登录FTP。 FTP RMTSYS
CL程序源代码如下:
Columns . . . : 1 71 Browse PFEIFFER/QCLSRC
SEU==> FTPBATCH
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
*************** Beginning of data ***********************************
0001.00 PGM
0002.00 CHGCMD CMD(QSYS/FTP) ALLOW(*ALL)
0003.00 OVRDBF FILE(INPUT) TOFILE(PFEIFFER/QCLSRC) +
0004.00 MBR(FTPCMDS)
0005.00 OVRDBF FILE(OUTPUT) TOFILE(PFEIFFER/QCLSRC) +
0006.00 MBR(FTPLOG)
0007.00 FTP RMTSYS(LOOPBACK) /* (FTP CL Program) */ ˙A
0008.00 DLTOVR FILE(INPUT OUTPUT)
0009.00 ENDPGM
****************** End of data **************************************
F3=Exit F5=Refresh F9=Retrieve F10=Cursor F12=Cancel
F16=Repeat find F24=More keys
2. 创建FTP输入文件。
Columns . . . : 1 71 Browse PFEIFFER/QCLSRC
SEU==> FTPCMDS
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
*************** Beginning of data ***********************************
0001.00 hans hans
0002.00 close
0003.00 open rchrs001
0004.00 user root mozart
0005.00 ascii
0006.00 syscmd dltf file(hans/rs6)
0007.00 get /tmp/ftpput.txt hans/rs6.rs6
0008.00 close
0009.00 open mvax
0010.00 user tester test
0011.00 get [tester.hans]ftpput hans/vax.vax (replace
0012.00 close
0013.00 open rchasm02
0014.00 user hans hans
0015.00 ebcdic
0016.00 put hans/rs6.rs6 pfeiffer/rs6.rs6
0017.00 quote rcmd sndnetf file(pfeiffer/rs6) tousrid((pfeiffer rchas149))
0018.00 close
0019.00 quit
****************** End of data **************************************
F3=Exit F5=Refresh F9=Retrieve F10=Cursor F12=Cancel
F16=Repeat find F24=More keys
3. 创建 CL程序提交批作业(FTPBATCH)
Columns . . . : 1 71 Browse PFEIFFER/QCLSRC
SEU==> FTPSUBMIT
FMT ** ...+... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7
*************** Beginning of data ***********************************
0001.00 PGM
0002.00 SBMJOB CMD(CALL PGM(PFEIFFER/FTPBATCH)) +
0003.00 JOB(FTPFRIDAY) OUTQ(PFEIFFER/PFEIFFER) +
0004.00 SCDDATE(*FRI) SCDTIME(170000) /* FTP for +
0005.00 Friday, 5:00 in the afternoon */
0006.00 ENDPGM
****************** End of data **************************************
F3=Exit F5=Refresh F9=Retrieve F10=Cursor F12=Cancel
F16=Repeat find F24=More keys
4.检查FTPLOG文件就可以得知FTP是否成功。
以下为FTP命令相应的返回代码,请对照它查看FTP是否成功、纠错。
Code Description
110 Restart marker reply
120 Service ready in nnn minutes
125 Data connection already open; transfer starting
150 File starting OK; about to open data connection
200 Command OK
202 Command not implemented; not used on this system
211 System status, or system help reply
212 Directory status
213 File status
214 Help message
220 Service ready for new user
226 Closing data connection; requested file action successful
230 User logged in
250 Requested file action okay, completed
257 Path name created
331 Password required
332 Account required
425 Cannot open data connection
426 Connection closed; transfer ended abnormally
450 Requested file action not taken; file busy
451 Requested action ended abnormally; local error in processing
452 Requested action not taken; insufficient storage in system space
500 Syntax error; command unrecognized
501 Syntax error in parameters or arguments
502 Command not implemented
503 Bad sequence of commands
504 Command not implemented for that parameter
530 Logon attempt rejected
532 Need account for storing files
550 Requested action not taken; file not found or no access
551 Requested action ended abnormally; page type unknown
552 Requested file action ended abnormally; exceeded storage allocation
553 Requested action not taken; file name not allowed
参考文献:
《V4 TCP/IP for AS/400:More Cool Things Than Ever》
《TCP/IP Configuration and Reference》
AS/400 Information center:
http://publib.boulder.ibm.com/html/as400/infocenter.html
转自:
AS/400上的FTP简介