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

📄 receiver.java

📁 一些学习java的练习作业 新手向参考资料 第四部分
💻 JAVA
字号:
// SMTP 偵傛傞儊乕儖庴怣僾儘僌儔儉Receiver.java
// 偙偺僾儘僌儔儉偼,庴怣梡儊乕儖僒乕僶偲偟偰摦嶌偟傑偡
// 巊偄曽java Receiver
// 婲摦偺椺java Receiver
// 偙偺僾儘僌儔儉偼,懠偐傜憲傜傟偨儊乕儖傪昗弨弌椡偵彂偒弌偟傑偡

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

// Receiver僋儔僗
// Receiver僋儔僗偼,Receiver僾儘僌儔儉偺杮懱偱偡
public class Receiver {
	final int SMTP_PORT = 25;// SMTP 愙懕梡億乕僩斣崋(25 斣)

	// sendResult儊僜僢僪
	// 僋儔僀傾儞僩偵懳偟偰儊僢僙乕僕傪憲傝傑偡
	public void sendResult(Socket smtp, BufferedReader smtp_in,
						   PrintWriter smtp_out,
						   String command)
		throws IOException
	{
		smtp_out.print(command + "\r\n");//儊僢僙乕僕偺憲怣
		smtp_out.flush();
		System.out.println("send> " + command);//憲怣撪梕偺昞帵
	}

	// getCommand儊僜僢僪
	// 僋儔僀傾儞僩偐傜偺僐儅儞僪傪撉傒庢傝傑偡
	// 僐儅儞僪偼嬻敀偱嬫愗偭偰,String偺攝楍偲偟傑偡
	public String[] getCommand(Socket smtp, BufferedReader smtp_in,
							   PrintWriter smtp_out)
		throws IOException
	{
		String res = smtp_in.readLine();//曉摎偺撉傒庢傝
		System.out.println("recv> " + res);
		//嬻敀偱嬫愗傝,寢壥傪屇傃弌偟懁偵曉偟傑偡
		StringTokenizer st = new StringTokenizer(res) ;
		String[] results = new String[st.countTokens()] ;
		for(int i = 0;st.hasMoreTokens();++i){
			results[i] = st.nextToken() ;
		}
		return results ;
	}

	// procCommand儊僜僢僪
	// 僋儔僀傾儞僩偐傜偺僐儅儞僪偑惓摉偐偳偆偐傪挷傋傑偡
	// 偦偺寢壥傪僋儔僀傾儞僩偵曉偟傑偡
	// 傕偟僐儅儞僪偑晄惓側傜,愙懕傪夝彍偟傑偡
	public void procCommand(Socket smtp, BufferedReader smtp_in,
							PrintWriter smtp_out,String command,
							String acceptableCommand,String result)
		throws IOException
	{
		if(acceptableCommand.equalsIgnoreCase(command)){
			sendResult(smtp, smtp_in, smtp_out,result) ;
		}else{
			sendResult(smtp, smtp_in, smtp_out,
					   "421 service not available") ;
			smtp.close() ;
		}
	}

	// receive儊僜僢僪
	// SMTP 偺僙僢僔儑儞傪恑傔傑偡
	public void receive(Socket smtp)
		throws IOException
	{
		try{
			String[] commands = null ;
			// CONNECT張棟
			BufferedReader smtp_in = new BufferedReader(
				new InputStreamReader (smtp.getInputStream()));
			PrintWriter smtp_out = new PrintWriter(
				smtp.getOutputStream());

			String myname = InetAddress.getLocalHost().getHostName();
			sendResult(smtp, smtp_in, smtp_out,
					   "220 " + myname + " SMTP");
			// HELO僐儅儞僪偺張棟
			commands = getCommand(smtp, smtp_in, smtp_out) ;
			procCommand(smtp, smtp_in, smtp_out,commands[0],"HELO",
				"250 " + "Hello " + commands[1] + ", pleased to meet you") ;

			// MAIL FROM僐儅儞僪偺張棟
			commands = getCommand(smtp, smtp_in, smtp_out) ;
			procCommand(smtp, smtp_in, smtp_out,commands[0],"MAIL","250 "
				+ commands[1].substring(commands[1].indexOf(":") + 1)
				+ "... Sender ok") ;
			// RCPT TO僐儅儞僪偺張棟
			commands = getCommand(smtp, smtp_in, smtp_out) ;
			procCommand(smtp, smtp_in, smtp_out,commands[0],
				"RCPT","250 Recipient ok") ;
			// DATA僐儅儞僪偺張棟
			commands = getCommand(smtp, smtp_in, smtp_out) ;
			procCommand(smtp, smtp_in, smtp_out,commands[0],"DATA",
				"354 Enter mail, end with \".\" on a line by itself") ;

			//儊僢僙乕僕奺峴偺庴怣
			String res = smtp_in.readLine() ;
			while(!(res.equals("."))){
				System.out.println(res) ;
				res = smtp_in.readLine() ;
			}
			sendResult(smtp, smtp_in, smtp_out,
				"250 Message accepted for delivery") ;
			// QUIT僐儅儞僪偺張棟
			commands = getCommand(smtp, smtp_in, smtp_out) ;
			procCommand(smtp, smtp_in, smtp_out, commands[0],"QUIT","221 "
				+ myname + " closing connection") ;
		}catch(Exception e){
		}
		// 僐僱僋僔儑儞偺僋儘乕僘
		smtp.close();
	}

	// mainproc儊僜僢僪
	// ServerSocket傪嶌傝,愙懕傪懸偪庴偗傑偡
	public void mainproc(){
		Socket sock ;
		try {
			ServerSocket serversock = new ServerSocket(SMTP_PORT,1) ;
			while(true){
				sock = serversock.accept() ;
				receive(sock) ;
			}
		}catch(IOException e){
			e.printStackTrace();
		}
	}

	// main儊僜僢僪
	// Receiver僋儔僗偺僆僽僕僃僋僩傪惗惉偟傑偡
	public static void main(String[] args){
		Receiver r = new Receiver() ;
		r.mainproc() ;
	}
}

⌨️ 快捷键说明

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