⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edit.txt

📁 TCP/IP用java语言实现
💻 TXT
📖 第 1 页 / 共 5 页
字号:
	// execCommand方法
	// 调用与命令对应的各种处理方法
	public boolean execCommand(String command)
	{
		boolean cont = true ;

		switch(Integer.parseInt(command)){
		case 1 :  // 显示服务器目录信息
			doLs() ;
			break ;
		case 2 :  // 切换服务器上的工作目录
			doCd() ;
			break ;
		case 3 :  // 显示当前目录
			doPwd() ;
			break ;
		case 4:	  //上层目录
			doCdup() ;
			break ;
		case 5 :  // 新建目录
			doMkd() ;
			break ;
		case 6 :  // 从服务器上取得文件
			doGet() ;
			break ;
		case 7 :  // 向服务器发送文件
			doPut() ;
			break ;
		case 8 :  // 文件传输模式
			doAscii() ;
			break ;
		case 9 :  // 二进制模式
			doBinary() ;
			break ;
		case 10 : // 强关dataSocket 流
			doAbor() ;
			break ;
		case 11 : // 删除服务器上的指定文件
			doDele() ;
			break ;
		case 12 : // 处理结束
			doQuit() ;
			cont = false ;
			break ;
		default : //其他的输入
			System.out.println("请选择一个序号") ;
		}
		return(cont) ;
	}

	// main_proc方法
	// 输出 Ftp 的命令菜单并进行各种处理
	public void main_proc()	throws IOException
	{
		boolean cont = true ;
		try {
			doLogin() ;							// 进行登录
			while(cont){
			showMenu() ;						// 输出菜单
			cont = execCommand(getCommand()) ;	//接收并执行命令
			}
		}
		catch(Exception e){
			System.err.print(e);
			System.exit(1);
		}
	}
	// getMsgs 立法
	// 启动接收控制流的线程式
	public void getMsgs(){
		try {
			CtrlListen listener = new CtrlListen(ctrlInput) ;
			Thread listenerthread = new Thread(listener) ;
			listenerthread.start() ;
		}catch(Exception e){
			e.printStackTrace() ;
			System.exit(1) ;
		}
	}

	// main方法
	// 建立TCP连接,开始处理
	public static void main(String[] arg){
		try {
			Ftp f = null;

			if(arg.length < 1){
				System.out.println("用法: java Ftp <host name>") ;
				return ;
			}
			f = new Ftp();
			f.openConnection(arg[0]); // 建立控制连接
			f.getMsgs() ; 			  //启动接收线程
			f.main_proc(); 			  // ftp 处理
			f.closeConnection() ; 	  // 关闭连接
			System.exit(0) ; 		  // 结束程序
		}catch(Exception e){
			e.printStackTrace();
			System.exit(1);
		}
	}
}

// CtrlListen 类
class CtrlListen implements Runnable{
	BufferedReader ctrlInput = null ;
	// 构造器,指定读取地点
	public CtrlListen(BufferedReader in){
		ctrlInput = in ;
	}

	public void run(){
		while(true){
			try{ 					  // 按行读入并写到标准输出上
				System.out.println(ctrlInput.readLine()) ;
			} catch (Exception e){
				System.exit(1) ;
			}
		}
	}
}// ftp 僾儘僌儔儉Ftp1.java
// 偙偺僾儘僌儔儉偼,ftp 僒乕僶偲愙懕偟傑偡
// 僨乕僞梡僐僱僋僔儑儞傪埖傢側偄偨傔,僼傽僀儖揮憲偼偱偒傑偣傫
// 巊偄曽java Ftp1 僒乕僶傾僪儗僗
// 婲摦偺椺java Ftp1 kiku.fuis.fukui-u.ac.jp

// 儔僀僽儔儕偺棙梡
import java.net.*;
import java.io.*;

// Ftp1僋儔僗
public class Ftp1 {
	// 僜働僢僩偺弨旛
	Socket ctrlSocket;//惂屼梡僜働僢僩
	public PrintWriter ctrlOutput;//惂屼弌椡梡僗僩儕乕儉
	public BufferedReader ctrlInput;// 摨擖椡梡僗僩儕乕儉

	final int CTRLPORT = 21 ;// ftp 偺惂屼梡億乕僩

	// openConnection儊僜僢僪
	//傾僪儗僗偲億乕僩斣崋偐傜僜働僢僩傪嶌傝惂屼梡僗僩儕乕儉傪嶌惉偟傑偡
	public void openConnection(String host)
		throws IOException,UnknownHostException
	{
		ctrlSocket = new Socket(host, CTRLPORT);
		ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());
		ctrlInput
			= new BufferedReader(new InputStreamReader
								(ctrlSocket.getInputStream()));
	}

	// closeConnection儊僜僢僪
	//惂屼梡偺僜働僢僩傪暵偠傑偡
	public void closeConnection()
		throws IOException
	{
		ctrlSocket.close() ;
	}

	// showMenu儊僜僢僪
	// ftp 偺僐儅儞僪儊僯儏乕傪弌椡偟傑偡
	public void showMenu()
	{
		System.out.println(">Command?") ;
		System.out.print("1 login") ;
		System.out.println(" 9 quit") ;
	}

	// getCommand儊僜僢僪
	// 棙梡幰偺巜掕偟偨僐儅儞僪斣崋傪撉傒庢傝傑偡
	public String getCommand()
	{
		String buf = "" ;
		BufferedReader lineread
			= new BufferedReader(new InputStreamReader(System.in)) ;
		while(buf.length() != 1){// 侾暥帤偺擖椡傪庴偗傞傑偱孞傝曉偟
			try{
				buf = lineread.readLine() ;
			}catch(Exception e)
			{
				e.printStackTrace();
				System.exit(1);
			}
		}
		return (buf) ;
	}

	// doLogin儊僜僢僪
	// ftp 僒乕僶偵儘僌僀儞偟傑偡
	public void doLogin()
	{
		String loginName = "" ;
		String password = "" ;
		BufferedReader lineread
			= new BufferedReader(new InputStreamReader(System.in)) ;
		try{
			System.out.println("儘僌僀儞柤傪擖椡偟偰偔偩偝偄") ;
			loginName = lineread.readLine() ;
			// USER僐儅儞僪偵傛傞儘僌僀儞
			ctrlOutput.println("USER " + loginName) ;
			ctrlOutput.flush() ;
			// PASS僐儅儞僪偵傛傞僷僗儚乕僪偺擖椡
			System.out.println("僷僗儚乕僪傪擖椡偟偰偔偩偝偄") ;
			password = lineread.readLine() ;
			ctrlOutput.println("PASS " + password) ;
			ctrlOutput.flush() ;
		}catch(Exception e)
		{
			e.printStackTrace();
			System.exit(1);
		}
	}

	// doQuit儊僜僢僪
	// ftp 僒乕僶偐傜儘僌傾僂僩偟傑偡
	public void doQuit()
	{
		try{
			ctrlOutput.println("QUIT ") ;// QUIT僐儅儞僪偺憲怣
			ctrlOutput.flush() ;
		}catch(Exception e)
		{
			e.printStackTrace();
			System.exit(1);
		}
	}

	// execCommand儊僜僢僪
	//僐儅儞僪偵懳墳偡傞奺張棟傪屇傃弌偟傑偡
	public boolean execCommand(String command)
	{
		boolean cont = true ;
		switch(Integer.parseInt(command)){
		case 1 : // login 張棟
			doLogin() ;
			break ;
		case 9 : // 張棟偺廔椆
			doQuit() ;
			cont = false ;
			break ;
		default : //偦傟埲奜偺擖椡
			System.out.println("斣崋傪慖戰偟偰偔偩偝偄") ;
		}
		return(cont) ;
	}

	// main_proc儊僜僢僪
	// ftp 偺僐儅儞僪儊僯儏乕傪弌椡偟偰,奺張棟傪屇傃弌偟傑偡
	public void main_proc()
		throws IOException
	{
		boolean cont = true ;
		try {
			while(cont){
				// 儊僯儏乕傪弌椡偟傑偡
				showMenu() ;
				// 僐儅儞僪傪庴偗庢傝幚峴偟傑偡
				cont = execCommand(getCommand()) ;
			}
		}
		catch(Exception e){
			System.err.print(e);
			System.exit(1);
		}
	}
	// getMsgs儊僜僢僪
	// 惂屼僗僩儕乕儉偺庴怣僗儗僢僪傪奐巒偟傑偡
	public void getMsgs(){
		try {
			CtrlListen listener = new CtrlListen(ctrlInput) ;
			Thread listenerthread = new Thread(listener) ;
			listenerthread.start() ;
		}catch(Exception e){
			e.printStackTrace() ;
			System.exit(1) ;
		}
	}

	// main儊僜僢僪
	// TCP 僐僱僋僔儑儞傪奐偄偰張棟傪奐巒偟傑偡
	public static void main(String[] arg){
		try {
			Ftp1 f = null;
			f = new Ftp1();
			f.openConnection(arg[0]);	// 惂屼梡僐僱僋僔儑儞偺愝掕
			f.getMsgs() ;				// 庴怣僗儗僢僪偺奐巒
			f.main_proc();				// ftp 張棟
			f.closeConnection() ;		// 僐僱僋僔儑儞偺僋儘乕僘
			System.exit(0) ;			// 僾儘僌儔儉偺廔椆
		}catch(Exception e){
			e.printStackTrace();
			System.exit(1);
		}
	}
}

// CtrlListen 僋儔僗
class CtrlListen implements Runnable{
	BufferedReader ctrlInput = null ;
	// 僐儞僗僩儔僋僞撉傒庢傝愭偺巜掕
	public CtrlListen(BufferedReader in){
		ctrlInput = in ;
	}

	public void run(){
		while(true){
			try{ // 傂偨偡傜峴傪撉傒庢傝,昗弨弌椡偵僐僺乕偟傑偡
				System.out.println(ctrlInput.readLine()) ;
			} catch (Exception e){
				System.exit(1) ;
			}
		}
	}
}// ftp 僾儘僌儔儉Ftp2.java
// 偙偺僾儘僌儔儉偼,ftp 僒乕僶偲愙懕偟傑偡
// 僨乕僞梡僐僱僋僔儑儞傪梡堄偟,LIST僐儅儞僪傪幚峴偟傑偡
// 僼傽僀儖揮憲婡擻偼偁傝傑偣傫
// 巊偄曽java Ftp2 僒乕僶傾僪儗僗
// 婲摦偺椺java Ftp2 kiku.fuis.fukui-u.ac.jp

// 儔僀僽儔儕偺棙梡
import java.net.*;
import java.io.*;

// Ftp2僋儔僗
public class Ftp2 {
	// 僜働僢僩偺弨旛
	Socket ctrlSocket;//惂屼梡僜働僢僩
	public PrintWriter ctrlOutput;//惂屼弌椡梡僗僩儕乕儉
	public BufferedReader ctrlInput;// 摨擖椡梡僗僩儕乕儉

	final int CTRLPORT = 21 ;// ftp 偺惂屼梡億乕僩

	// openConnection儊僜僢僪
	//傾僪儗僗偲億乕僩斣崋偐傜僜働僢僩傪嶌傝惂屼梡僗僩儕乕儉傪嶌惉偟傑偡
	public void openConnection(String host)
		throws IOException,UnknownHostException
	{
		ctrlSocket = new Socket(host, CTRLPORT);
		ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());
		ctrlInput
			= new BufferedReader(new InputStreamReader
								(ctrlSocket.getInputStream()));
	}

	// closeConnection儊僜僢僪
	//惂屼梡偺僜働僢僩傪暵偠傑偡
	public void closeConnection()
		throws IOException
	{
		ctrlSocket.close() ;
	}

	// showMenu儊僜僢僪
	// Ftp 偺僐儅儞僪儊僯儏乕傪弌椡偟傑偡
	public void showMenu()
	{
		System.out.println(">Command?") ;
		System.out.print("1 login") ;
		System.out.print(" 2 ls") ;
		System.out.print(" 3 cd") ;
		System.out.println(" 9 quit") ;
	}

	// getCommand儊僜僢僪
	// 棙梡幰偺巜掕偟偨僐儅儞僪斣崋傪撉傒庢傝傑偡
	public String getCommand()
	{
		String buf = "" ;
		BufferedReader lineread
			= new BufferedReader(new InputStreamReader(System.in)) ;

		while(buf.length() != 1){// 侾暥帤偺擖椡傪庴偗傞傑偱孞傝曉偟
			try{
				buf = lineread.readLine() ;
			}catch(Exception e)
			{
				e.printStackTrace();
				System.exit(1);
			}
		}
		return (buf) ;
	}

	// doLogin儊僜僢僪
	// ftp 僒乕僶偵儘僌僀儞偟傑偡
	public void doLogin()
	{
		String loginName = "" ;
		String password = "" ;
		BufferedReader lineread
			= new BufferedReader(new InputStreamReader(System.in)) ;

		try{
			System.out.println("儘僌僀儞柤傪擖椡偟偰偔偩偝偄") ;
			loginName = lineread.readLine() ;
			// USER僐儅儞僪偵傛傞儘僌僀儞
			ctrlOutput.println("USER " + loginName) ;
			ctrlOutput.flush() ;
			// PASS僐儅儞僪偵傛傞僷僗儚乕僪偺擖椡
			System.out.println("僷僗儚乕僪傪擖椡偟偰偔偩偝偄") ;
			password = lineread.readLine() ;
			ctrlOutput.println("PASS " + password) ;
			ctrlOutput.flush() ;
		}catch(Exception e)
		{
			e.printStackTrace();
			System.exit(1);
		}
	}

	// doQuit儊僜僢僪
	// ftp 僒乕僶偐傜儘僌傾僂僩偟傑偡
	public void doQuit()
	{
		try{
			ctrlOutput.println("QUIT ") ;// QUIT僐儅儞僪偺憲怣
			ctrlOutput.flush() ;
		}catch(Exception e)
		{
			e.printStackTrace();
			System.exit(1);
		}
	}

	// doCd儊僜僢僪
	// 僨傿儗僋僩儕傪曄峏偟傑偡
	public void doCd()
	{
		String dirName = "" ;
		BufferedReader lineread
			= new BufferedReader(new InputStreamReader(System.in)) ;

		try{
			System.out.println("僨傿儗僋僩儕柤傪擖椡偟偰偔偩偝偄") ;
			dirName = lineread.readLine() ;
			ctrlOutput.println("CWD " + dirName) ;// CWD僐儅儞僪
			ctrlOutput.flush() ;
		}catch(Exception e)
		{
			e.printStackTrace();
			System.exit(1);
		}
	}

	// doLs儊僜僢僪
	// 僨傿儗僋僩儕忣曬傪摼傑偡
	public void doLs()
	{
		try{
			int n ;
			byte[] buff = new byte[1024] ;
			// 僨乕僞梡僐僱僋僔儑儞傪嶌惉偟傑偡
			Socket dataSocket = dataConnection("LIST") ;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -