FTP(文件傳輸協(xié)議)是TCP/IP中使用最廣泛的應(yīng)用之一,AS/400中的TCP/IP支持各種局域網(wǎng)、廣域網(wǎng)連接類型:Ethernet、Token-Ring、SDDI、Wireless LAN、X.25 SVC 、PVC和Frame Relay。所有的計算機(jī)系統(tǒng)都非常重視文件操作,AS/400系統(tǒng)也不例外,本文件討論FTP的理論、FTP的配置、FTP命令集和在AS/400上如何使用FTP。
FTP是如何工作的?
FTP是基于客戶-服務(wù)器模型而設(shè)計的,客戶和服務(wù)器之間利用TCP建立連接。與其他客戶-服務(wù)器模型不同的是,FTP客戶與服務(wù)器之間要建立雙重連接,一個是控制連接、一個是數(shù)據(jù)連接。建立雙重連接的原因在于FTP是一個交互會話系統(tǒng),某客戶每次調(diào)用FTP,便與服務(wù)器建立一個會話,會話以控制連接來維持,直至退出FTP。控制連接負(fù)責(zé)傳輸控制信息,尤其是客戶命令(比如文件傳輸命令等等)。利用控制命令,客戶可以向服務(wù)器提出無數(shù)次的請求(一個請求就是一個客戶命令)。客戶每提出一個請求,服務(wù)器再與客戶建立一個數(shù)據(jù)連接,進(jìn)行實際的數(shù)據(jù)(比如文件)傳輸。一但數(shù)據(jù)傳輸完成,數(shù)據(jù)連接會話就被撤銷,但控制連接依然存在,客戶可以繼續(xù)發(fā)出命令。直到客戶鍵入CLOSE命令撤消控制連接,再鍵入QUIT退出FTP會話,此時雙方控制進(jìn)程死亡。
FTP連接的建立
在一個FTP會話中,需要建立一個控制連接和若干個數(shù)據(jù)連接。
建立控制連接的過程大家都很熟悉。FTP服務(wù)器的公認(rèn)端口是21,客戶控制進(jìn)程申請一個隨機(jī)分配的本地端口后,用常規(guī)的方法可以與服務(wù)器端口21建立一個相關(guān)。
數(shù)據(jù)連接的建立就沒那么簡單了。在建立數(shù)據(jù)連接的過程中,客戶控制進(jìn)程反客為主,成為連接的接收者,而服務(wù)器數(shù)據(jù)傳輸進(jìn)程成了連接的請求者。作為一個新的子進(jìn)程,服務(wù)器傳輸進(jìn)程可以申請一個新的端口號建立自己的半相關(guān)(一般是利用FTP的保留端口號20 ),而它向哪個客戶端口發(fā)送連接請求呢?要知道客戶是沒有公認(rèn)端口的,這是就要利用到控制連接,客戶控制進(jìn)程通過控制連接告知服務(wù)器控制進(jìn)程自己的數(shù)據(jù)連接端口號,服務(wù)器控制進(jìn)程將它轉(zhuǎn)告自己的數(shù)據(jù)傳輸進(jìn)程,服務(wù)器數(shù)據(jù)傳輸進(jìn)程便可以利用它與客戶建立數(shù)據(jù)連。
FTP命令集
“!”或 “SYSCMD”:用戶可以在FTP模式中執(zhí)行本地AS/400的命令。在實際工作中,這一命令非常有用,你不用退出FTP模式就可以直接執(zhí)行本地AS/400的命令。
“DIR” :列出遠(yuǎn)程AS/400某個目錄中的Files和Members。若你執(zhí)行了“PUT”操作,用“DIR”命令查看是否將文件傳到了遠(yuǎn)程AS/400中。
“PWD”:列出遠(yuǎn)程系統(tǒng)的當(dāng)前目錄中的Files和Members。
“LPWD”:本地系統(tǒng)的當(dāng)前工作目錄中的Files和Members。
“PUT”:將文件從本地系統(tǒng)發(fā)送到遠(yuǎn)程系統(tǒng)。
“MPUT”:將多個文件從本地系統(tǒng)發(fā)送到遠(yuǎn)程系統(tǒng)。
“GET”:將遠(yuǎn)程系統(tǒng)中的文件傳回到本地系統(tǒng)。
“MGET”:將遠(yuǎn)程系統(tǒng)中的多個文件傳回到本地系統(tǒng)。
“ASCII”:改變到ASCII模式。
“BINARY”:改變到BINARY模式。
“EBCDIC”:改變到EBCDIC模式。
特別注意:將含有數(shù)值類型的文件,從AS/400發(fā)送到ASCII系統(tǒng)時,應(yīng)將文件中的數(shù)值子段改為ZONED類型,而不是PACKED類型,否則將發(fā)生不可預(yù)知的結(jié)果。
“RENAME”:更改遠(yuǎn)程系統(tǒng)的文件名。
“QUOTE”:執(zhí)行遠(yuǎn)程服務(wù)器端的命令而不用重新登錄遠(yuǎn)程系統(tǒng)。
“LCD”:改變本地系統(tǒng)的當(dāng)前目錄。
“CD”:改變遠(yuǎn)程系統(tǒng)的當(dāng)前目錄。
“CDUP”:進(jìn)入遠(yuǎn)程系統(tǒng)的父目錄。
“LOCSTAT”:顯示本地狀態(tài)信息。
配置AS/400 PTF服務(wù)器
用戶要配置AS/400 PTF服務(wù)器,需要*IOSYSCFG特權(quán)。
1.配置TCP/IP。
2.修改FTP屬性,CHGFTPA(對QUSRSYS/QATMFTP.CONFIG,數(shù)據(jù)庫文件修改)。
主要參數(shù)說明:
Autostart Servers: 當(dāng)Autostart Servers為*YES時,一旦TCP/IP啟動,FTP服務(wù)器也將自動啟動。
Number of Initial servers: FTP服務(wù)器初始啟動數(shù)量。根據(jù)FTP的流量而定,初始值為3,一般足夠用了。
Inactivity timeout: 指出FTP客戶端與服務(wù)器端在多少秒沒有交互后,連接將斷開。卻省為300秒(5分鐘)。
Coded character set identifier: 缺省值為00819,所有被傳入的ASCII字符將被翻譯成EBCDIC 500 代碼頁。也可以制定你自己的轉(zhuǎn)換表。
Initial name format:缺省值為*LIBL,將所有FTP服務(wù)器的命名形式設(shè)置為NAMEFMT= 0;若此值為*PATH,則NAMEFMT=1。
Initial directory:缺省值為*CURLIB,以登錄FTP服務(wù)器的用戶的當(dāng)前目錄為FTP會話的目錄;若此值為*HOMEDIR時,FTP會話的目錄以用戶簡要表的HOMEDIR參數(shù)為準(zhǔn)。
New file CCSID:指定用FTP創(chuàng)建文件的CCSID值。
啟動/停止FTP服務(wù)器
手工啟動FTP服務(wù)器,在AS/400命令行輸入:
STRTCPSVR *FTP
手工停止所有FTP服務(wù)器,在AS/400命令行輸入:
ENDTCPSVR *FTP
因為直接用ENDTCPSVR *FTP命令停止FTP服務(wù)器,用戶可能會丟失數(shù)據(jù),為了保證用戶不丟失數(shù)據(jù),應(yīng)按照以下步驟處理:
1. 在AS/400的命令行輸入:
WRKACTJOB SBS(QSYSWRK)
查找是否有QTFTPxxxxx(xxxxx代表5為數(shù)字)存在,若沒有,則可以執(zhí)行ENDTCPSVR *FTP命令;若有,則應(yīng)執(zhí)行第二步。
2. 確保沒有用戶登錄FTP服務(wù)器。在AS/400的命令行輸入:
NETSTAT *CNN
查看是否有LOCAL PORT 為FTP-CON狀態(tài)為ESTABLISHED的連接存在,若沒有則可以執(zhí)行第三步;若有,應(yīng)等待用戶的FTP結(jié)束,在執(zhí)行第三步。
3. 在AS/400的命令行輸入:
ENDTCPSVR *FTP
STRTCPSVR *FTP
也可以通過“操作導(dǎo)航器”(OPERATION NAVIGATOR)來實現(xiàn)FTP服務(wù)器的啟動/停止:
1. 打開“操作導(dǎo)航器”,路徑“Network"Servers"TCP/IP”。
2. 用鼠標(biāo)右鍵點擊“FTP SERVER”。
3. 來實現(xiàn)FTP服務(wù)器的啟動/停止。
批方式FTP
FTP被設(shè)計為交互式TCP/IP應(yīng)用,但AS/400也支持FTP批處理方式。
FTP批處理運行方式,應(yīng)按照以下步驟進(jìn)行:
1. 創(chuàng)建一個CL程序來啟動FTP。
2. 創(chuàng)建一個含有所有交互方式FTP命令的源物理文件的成員。
3. 提交批作業(yè)運行這個CL程序。
4. 檢查結(jié)果。
下面具體討論一個例子來說明批方式FTP:
1. 創(chuàng)建一個CL程序
使FTP命令可以運行在批方式下。
CHGCMD CMD(QSYS/FTP) ALLOW(*ALL)
將交互輸入方式改為批方式,從源物理文件成員(FTPCMDS)得到FTP命令,將FTP消息發(fā)往源物理文件成員(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. 創(chuàng)建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. 創(chuàng)建 CL程序提交批作業(yè)(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命令相應(yīng)的返回代碼,請對照它查看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
參考文獻(xiàn):
《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
轉(zhuǎn)自:
AS/400上的FTP簡介