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簡介