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

📄 t2.java

📁 一些学习java的练习作业 新手向参考资料 第三部分
💻 JAVA
字号:
// telnet 僾儘僌儔儉T2.java
// 偙偺僾儘僌儔儉偼,巜掕偝傟偨傾僪儗僗偺億乕僩偵昗弨擖弌椡傪愙懕偟傑偡
// 愙懕愭偑telnet 偺億乕僩(23斣)偺応崌,僱僑僔僄乕僔儑儞傪峴偄傑偡
// 僱僑僔僄乕僔儑儞偱偼,僒乕僶偐傜偺梫媮傪偡傋偰抐傝傑偡
// 巊偄曽java T2 僒乕僶傾僪儗僗億乕僩斣崋
// 婲摦偺椺java T2 kiku.fuis.fukui-u.ac.jp 23
// 廔椆偵偼僐儞僩儘乕儖C 傪擖椡偟偰偔偩偝偄

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

// T2僋儔僗
// T2僋儔僗偼,僱僢僩儚乕僋愙懕偺娗棟傪峴偄傑偡
// StreamConnector僋儔僗傪梡偄偰僗儗僢僪張棟傪峴偄傑偡
public class T2 {
	Socket serverSocket; //愙懕梡僜働僢僩
	public OutputStream serverOutput;//僱僢僩儚乕僋弌椡梡僗僩儕乕儉
	public BufferedInputStream serverInput; // 摨擖椡梡僗僩儕乕儉
	static final int DEFAULT_TELNET_PORT = 23; // telnet 偺億乕僩斣崋(23斣)

	// openConnection儊僜僢僪
	//傾僪儗僗偲億乕僩斣崋偐傜僜働僢僩傪嶌傝僗僩儕乕儉傪嶌惉偟傑偡
	public void openConnection(String host,int port)
		throws IOException,UnknownHostException
	{
		serverSocket = new Socket(host, port);
		serverOutput = serverSocket.getOutputStream();
		serverInput = new
			BufferedInputStream(serverSocket.getInputStream());
		if (port == DEFAULT_TELNET_PORT){
			// 愙懕愭偑telnet 億乕僩側傜,僱僑僔僄乕僔儑儞傪峴偄傑偡
			negotiation(serverInput, serverOutput);
		}
	}

	// main_proc儊僜僢僪
	// 僱僢僩儚乕僋偲偺傗傝偲傝傪偡傞僗儗僢僪傪僗僞乕僩偝偣傑偡
	public void main_proc()
		throws IOException
	{
		try {
			// 僗儗僢僪梡僋儔僗StreamConnector偺僆僽僕僃僋僩傪惗惉偟傑偡
			StreamConnector stdin_to_socket =
				new StreamConnector(System.in, serverOutput);
			StreamConnector socket_to_stdout =
				new StreamConnector(serverInput, System.out);
			// 僗儗僢僪傪惗惉偟傑偡
			Thread input_thread = new Thread(stdin_to_socket);
			Thread output_thread = new Thread(socket_to_stdout);
			// 僗儗僢僪傪婲摦偟傑偡
			input_thread.start();
			output_thread.start();
		}
		catch(Exception e){
			System.err.print(e);
			System.exit(1);
		}
	}

	// 僱僑僔僄乕僔儑儞偵梡偄傞僐儅儞僪偺掕媊
	static final byte IAC = (byte) 255;
	static final byte DONT = (byte) 254;
	static final byte DO = (byte) 253;
	static final byte WONT = (byte) 252;
	static final byte WILL = (byte) 251;

	// negotiation儊僜僢僪
	// NVT 偵傛傞捠怣傪僱僑僔僄乕僩偟傑偡
	static void negotiation(BufferedInputStream in,OutputStream out)
		throws IOException
	{
		byte[] buff = new byte[3];//僐儅儞僪庴怣梡攝楍
		while(true) {
			in.mark(buff.length);
			if (in.available() >= buff.length) {
				in.read(buff);
				if (buff[0] != IAC){// 僱僑僔僄乕僔儑儞廔椆
					in.reset();
					return;
				} else if (buff[1] == DO) {// DO僐儅儞僪偵懳偟偰偼乧
					buff[1] = WONT; // WON'T偱曉摎偟傑偡
					out.write(buff);
				}
			}
		}
	}

	// main儊僜僢僪
	// TCP僐僱僋僔儑儞傪奐偄偰張棟傪奐巒偟傑偡
	public static void main(String[] arg){
		try {
			T2 t = null;
			t = new T2();
			t.openConnection(arg[0], Integer.parseInt(arg[1]));
			t.main_proc();
		}catch(Exception e){
			e.printStackTrace();
			System.exit(1);
		}
	}
}

// StreamConnector僋儔僗
// 僗僩儕乕儉傪庴偗庢傝,椉幰傪寢崌偟偰僨乕僞傪庴偗搉偟傑偡
// StreamConnector僋儔僗偼僗儗僢僪傪峔惉偡傞偨傔偺僋儔僗偱偡
class StreamConnector implements Runnable {
	InputStream src = null;
	OutputStream dist = null;
	// 僐儞僗僩儔僋僞擖弌椡僗僩儕乕儉傪庴偗庢傝傑偡
	public StreamConnector(InputStream in, OutputStream out){
		src = in;
		dist = out;
	}

	// 張棟偺杮懱
	// 僗僩儕乕儉偺撉傒彂偒傪柍尷偵孞傝曉偟傑偡
	public void run(){
		byte[] buff = new byte[1024];
		while (true) {
			try {
				int n = src.read(buff);
				if (n > 0)
					dist.write(buff, 0, n);
			}
			catch(Exception e){
				e.printStackTrace();
				System.err.print(e);
				System.exit(1);
			}
		}
	}
}

⌨️ 快捷键说明

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