一个必看的Java程序

//程序名 :TelnetApp.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()
   {
     resize(400,300);
     setLayout(new BorderLayout());
     Panel p1=new Panel();
     log =new TextArea(10,80);
     log.setEditable(true);
     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 =getDate())!= 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 getDate()
    {
      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]=(byte)-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]=-3;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());
        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(){
    }
 }

这是applet 的一个小应用,是关于bbs登录界面的,大家可以借鉴一下.
posted on 2005-08-02 15:50  轻松逍遥子  阅读(349)  评论(0编辑  收藏  举报