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

📄 telnetapp.java

📁 Java程序设计清华出版课件源码答案共十四章
💻 JAVA
字号:
import java.applet.*;
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;

public class TelnetApp extends Applet implements Runnable
{
	// 声明成员变量

	Thread client;
	TextArea log;

	TextField hostname;
	TextField userid;
	TextField password;
	Label hname;
	Label uid;
	Label psd;

	Button connect;
	Button bye;
	int wantTime;
	boolean logged;

	Socket socket = null;
	PrintStream os;
	DataInputStream is;

	public TelnetApp()
	{
	}

	public void init()
	{
		resize(400,300);
		setLayout(new BorderLayout());
		Panel p1 = new Panel();
		log = new TextArea(10,80);
		log.setEditable(false);
		p1.add(log);
		add("North",p1);

		Panel p2 = new Panel();
		p2.add(hname = new Label("Hostname:"));
		p2.add(hostname = new TextField(20));
		p2.add(uid = new Label("Userid:"));
		p2.add(userid = new TextField(10));
		p2.add(psd = new Label("Password:"));
		p2.add(password = new TextField(10));
		password.setEchoCharacter('*');

		add("Center",p2);

		Panel p3 = new Panel();
		p3.add(connect = new Button("Connect"));
		p3.add(bye = new Button("Bye"));
		bye.disable();
		add("South",p3);

		logged = false;
	}

	public void run(){
		String fromServer = null;
		byte b[] = new byte[3];
		b[0] = (byte)'n';
		while(true){
			if((fromServer = getData())!=null)
				log.appendText(fromServer+"\n");
				if(wantTime <0){
					bye();
					break;
				}
				if(logged){
					delay(60*1000);
					log.setText(" ");
					wantTime-=1;
					sendData(b,1);
				}
			}
		}

	//  建立主机连接

	private boolean connectHost(String hostName){
		try{
			socket = new Socket(hostName,23);
			os = new 

PrintStream(socket.getOutputStream());
			is = new 

DataInputStream(socket.getInputStream());
		}catch(UnknownHostException e){
			log.setText("Trying to connect to unknown host:" +e);
			return false;
		}catch(Exception e){
			log.setText("Exception: "+e);
			return false;
		}
		return true;
	}

	//  接收信息

	String getData(){
		String fromServer;
		int len;
		byte b[] = new byte[1000];
		try{
		fromServer = " "; 
		len = is.read(b);

		fromServer += new String(b,0);
		}catch(Exception e){
			log.setText("Exception: "+e);
			return null;
		}

		return fromServer;
	}

	//  发送信息

	boolean sendData(byte b[],int len){
		try{
			os.write(b,0,len);
			os.flush();
			}catch(Exception e){
			log.setText("Exception: "+e);
			return false;
		}
		return true;
	}

	// 关闭连接

	void closeSocket(){
		try{
		os.close();
		is.close();
		socket.close();
		socket = null;
		}catch(Exception e){
			log.setText("Exception: "+e);
		}
	}

	void toByte(byte[] b,String s){
		int i;

		for(i=0;i<s.length();i++)
			b[i]=(byte)s.charAt(i);
			b[i] = 13;
			b[i+1] = 10;
	}

	void negotiate(){
		byte b[] = new byte[20];
		b[0]=-1;b[1]=-5;b[2]=24;
		sendData(b,3);
		delay(400);

		b[0]=-1;b[1]=-6;b[2]=24;
		b[3]=0;b[4]=(byte)'D';b[5]=(byte)'E';
		b[6]=(byte)'C';b[7]=(byte)'-';b[8]=(byte)'V';
		b[9]=(byte)'T';b[10]=(byte)'1';b[11]=(byte)'0';
		b[12]=(byte)'0';b[13]=-1;b[14]=-16;
		sendData(b,15);
		delay(400);

		// 其他选项
		b[0]=-1;b[1]=-3;b[2]=1;
		b[3]=-1;b[4]=-3;b[5]=3;
		b[6]=-1;b[7]=-5;b[8]=31;
		b[9]=-1;b[10]=-4;b[11]=-56;
		b[12]=-1;b[13]=-5;b[14]=1;
		sendData(b,15);
		delay(400);

		//  login bbs
		toByte(b,"bbs");
		sendData(b,5);
		delay(400);
	}

	void login(String userid,String password){
		byte b[] = new byte[20];
		toByte(b,userid);
		sendData(b,userid.length()+2);
		delay(400);

		toByte(b,password);
		sendData(b,password.length()+2);
		delay(400);
	}

	boolean enter(){
		if(connectHost(hostname.getText().trim())){
			log.setText("connected\n");


			negotiate();
			delay(400);

			

login(userid.getText().trim(),password.getText().trim());
			delay(400);
			return true;
			}else return false;
	}	


	void toMainmenu(){ 
		byte b[] = new byte[20];
		for(int i=0;i<6;i++){
			toByte(b," ");
			sendData(b,2);
		}

		for(int i=0;i<1;i++){
			b[0] = (byte)'q';
			sendData(b,1);
			delay(200);
		}
	}

	void bye(){
		byte b[] = new byte[20];

		for(int i=0;i<10;i++){
			b[0] = (byte)'q';
			sendData(b,1);
			delay(300);
		}

		b[0]=(byte)'g';
		sendData(b,1);
		delay(300);
		for(int i=0;i<6;i++){
			toByte(b," ");
			sendData(b,2);
			delay(300);
		}
		client.stop();
		client=null;
		closeSocket();
		connect.enable();
		bye.disable();
	}

	void delay(int millisecond){
		try{
			Thread.sleep(millisecond);
		}catch(InterruptedException e){
	}
}

public boolean action(Event e,Object arg){
switch(e.id){
case Event.ACTION_EVENT:
if(e.target == connect){
wantTime = 20;
connect.disable();
bye.enable();
client = new Thread(this);
client.start();
if(enter())
toMainmenu();
logged = true;
}else if(e.target == bye)
bye();
}
return true;
}

public void destroy()
{
}

public void paint(Graphics g)
{
}

public void start()
{
}

public void stop()
{
}
}

⌨️ 快捷键说明

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