Now there are a lot of middleware for FTP used in Java languages, but how is the specific formation achieved?
I have an example here:
import java.net *;. import java.io *;. public class Ftp {Socket ctrlSocket; public PrintWriter ctrlOutput; public BufferedReader ctrlInput; PrintWriter out = new PrintWriter (System.out, true); public void openConnection (String host) throws IOException, UnknownHostException {try {ctrlSocket = new Socket (host, 21); ctrlOutput = new PrintWriter (ctrlSocket.getOutputStream ()); ctrlInput = new BufferedReader (new InputStreamReader (ctrlSocket.getInputStream ()));} catch (Exception ex) {EX.PrintStackTrace ();}} public void closeconnection () throws oException {ctrlsocket.close ();}
Public void showmenu () {out.println ("2 ls"); OUT.Println ("3 CD"); Out.println ("4 get"); Out.println ("5 PUT"); Out.println "6 ASCII"); Out.Println ("7 binary"); Out.println ("9 quit");} public string getcommand () {string buf = ""; bufferedReader lineRead = New BufferedReader (SYSTEM. IN); while (buf.length ()! = 1) {Try {buf = lineRead.readLine ();} catch (exception ex) {ex.printStackTrace (); system.exit (1);}} OUT. println ( "connect-begin" buf); return (buf);} public void doLogin () {String loginName = ""; String password = ""; BufferedReader lineread = new BufferedReader (new InputStreamReader (System.in)); Try {OUT.Println ("Your Name:"); ctrloutput.flush (); loginname = lineread.readline (); ctrloutput.flush (); ctrloutput.println ("user" loginname); ctrloutput.flush (); ctrloutput.flush (); Out.println ("Your Password"); ctrloutput.flush (); password = lineRead.readLine (); ctrloutput.flush (); ctrloutput.println ("pass" password); Ctrloutput.flush ();} catch (exception ex) {ex.printstacktrace (); system.exit (1);}} public void doquit ()}} public void doquit ()} public void doquit ()}; ctrloutput.println ("quit"; ctrloutput.flush () ;} catch (Exception ex) {ex.printStackTrace (); System.exit (1);}} public void doCd () {String dirName = ""; BufferedReader lineread = new BufferedReader (new InputStreamReader (System.in)); Try {Out.println ("Your Directionary:"); dirname = lineRead.readline (); ctrloutput.println ("CWD" DIRNAME); ctrloutput.flush ();
} Catch (exception ex) {ex.printstacktrace (); system.exit (1);}} public void dols ()}} public void dols () {Try {int N; Byte [] buff = new byte [1024]; out.println ("SOCK "); Socket dataSocket = dataConnection (" LIST "); out.println (" sock = " dataSocket); BufferedInputStream dataInput = new BufferedInputStream (dataSocket.getInputStream ()); while ((n = dataInput.read (buff)) > 0) {System.Out.write (buff, 0, n);} datasocket.close ();} catch (exception ex) {ex.printstacktrace (); system.exit (1);}} public socket DataConnection String ctrlcmd) {String cmd = "PORT"; int i; Socket dataSocket = null; try {byte [] address = InetAddress.getLocalHost () getAddress ();. ServerSocket serverDataSocket = new ServerSocket (8802,1); for (i = 0; i <4; i ) {cmd = cmd (address [i] & 0xff) ",";} cmd = cmd (((ServerDataSocket.getlocalport ()) / 256) & 0xFF) "," (ServerDataSocket.getlocalPort () & 0xFF); Out.Println (CMD); Ctrloutput.Println (CMD); ctrloutput.flush (); Ctrloutput.println (ctrlcmd); ctrloutput.flush (); DataSocket = serverDataSocket.accept (); serverDataSocket.close ();} catch (exception ex) {ex.printstacktrace (); system.exit (1);} OUT. Println ("cmd =" cmd "SOCK =" DataSocket); Return DataSocket;} public void doascii () {Try {ctrloutput.println ("Type A"); ctrloutput.flush ();} catch (Exception EX) ) {Ex.printStackTrace (); system.exit (1);}} public void dobinary ()} public void dobinary () {ctrloutput.println ("Type I"); ctrloutput.flush ();
} Catch (Exception ex) {ex.printStackTrace (); System.exit (1);}} public void doGet () {String fileName = ""; BufferedReader lineread = new BufferedReader (new InputStreamReader (System.in)); try {int n; byte [] buff = new byte [1024]; out.println ( "input your finename:"); fileName = lineread.readLine (); FileOutputStream outfile = new FileOutputStream (fileName); Socket dataSocket = dataConnection ( " RETR " fileName); BufferedInputStream dataInput = new BufferedInputStream (dataSocket.getInputStream ()); while ((n = dataInput.read (buff))> 0) {outfile.write (buff, 0, n);} dataSocket.close (); OUTFILE.CLOSE ();} catch (exception ex) {ex.printstacktrace (); system.exit (1);}}
public void doPut () {String fileName = ""; BufferedReader lineread = new BufferedReader (new InputStreamReader (System.in)); try {int n; byte [] buff = new byte [1024]; FileInputStream sendfile = null; out. Println ("INPUT FILE NAME:"); filename = lineRead.readLine (); try {sendfile = new fileinputstream (filename);} catch (exception ex) {outputln ("file not exist"); return;} Socket DataSocket = DataConnection ("stor" filename); OutputStream outstr = DataSocket.getOutputStream (); while ((n = sendfile.read (buff))> 0) {Outstr.write (buff, 0, n);} DataSocket. Close (); sendfile.close ();} catch (exception ex) {ex.printStackTrace (); system.exit (1);}} public boolean execcommand (Switch) {boolean contact {Boolean Cont = true; switch (Integer.Parseint) (Case 2: DOLS (); Break; Case 3: DOCD (); Break; Case 4: doget (); Break; Case 5: DOPUT (); Break; Case 6: doascii (); break; Case 7: Dobinary (); Break; CA SE 9: doquit (); Cont = False; Break; default: Out.println ("Input Again");} Return Cont;} PUBLIC VOID Main_Proc () {Boolean Cont = True; Try {DOLOGIN (); While (Cont ) {ShowMenu (); cop = execcommand (getcommand ());}} catch (exception ex) {ex.printstacktrace (); system.exit (1);}} public void getms ()}} public void getms ()}} public void getms ()} Ctrllisten (Ctrlinput); Thread Listenerthread = New Thread (listener); listenertHread.Start ();} catch (exception ex) {ex.printstacktrace (); system.exit (1);}}