Cyh的博客

          Email:kissyan4916@163.com
          posts - 26, comments - 19, trackbacks - 0, articles - 220

          網絡編程>>Telnet客戶端

          Posted on 2009-12-17 22:27 啥都寫點 閱讀(911) 評論(0)  編輯  收藏 所屬分類: J2SE
            實現Telnet客戶端的關鍵技術如下:

            訪問系統的Telnet服務實質上是與Telnet服務建立Socket連接,默認的Telnet服務的端口是23
            Telnet客戶端將標準輸入流中的命令發送給Telnet服務,將響應消息顯示在標準輸出流中。因此,Telnet客戶端相當于一個代理服務,起中轉作用,將標準輸入流、Telnet服務和標準輸出流連接起來。


          import java.io.BufferedReader;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.InputStreamReader;
          import java.io.OutputStream;
          import java.io.PrintStream;
          import java.net.Socket;

          /**
           * Telnet客戶端,可以登陸到Telnet服務器。
           
          */

          public class TelnetClient {

              
          // 默認的Telnet服務器名
              public static final String DEFAULT_HOST = "127.0.0.1";
              
          // 默認的Telnet服務器端口
              public static final int DEFAULT_PORT = 23;
              
              
          // 主機名(或者IP)和端口號
              private String host;
              
          private int port;

              
          // 連接主機的socket
              Socket socket = null;
              
          // 發送數據和接收數據的管道,Pipe為自定義類
              Pipe sendPipe = null;
              Pipe receivePipe 
          = null;
              
              
          // 默認構造方法
              public TelnetClient(){
                  
          this.host = DEFAULT_HOST;
                  
          this.port = DEFAULT_PORT;
              }

              
          public TelnetClient(String host, int port){
                  
          this.host = host;
                  
          this.port = port;
              }


              
          /**
               * 登陸到服務器
               
          */

              
          public void telnet() {
                  System.out.println(
          "Connecting to telnet server " + host + "" + port);
                  
          try {
                      socket 
          = new Socket(host, port);

                      
          // 將socket的輸入端數據(來自服務器端)流向本地標準輸出,即接收數據
                      receivePipe = new Pipe(socket.getInputStream(), System.out);
                      receivePipe.start();
                      
          // 將本地的標準輸入數據流向socket的輸出端,即流向服務器端,發送數據
                      sendPipe = new Pipe(System.in, socket.getOutputStream());
                      sendPipe.start();
                  }
           catch(IOException e) {
                      System.out.println(
          "連接失敗:" + e);
                      
          return;
                  }

                  System.out.println(
          "連接成功");
              }

              
          /**
               * 斷開連接
               
          */

              
          public void disconnect() {
                  
          if (socket != null){
                      
          try {
                          socket.close();
                          System.out.println(
          "成功斷開連接");
                      }
           catch (IOException e) {
                          e.printStackTrace();
                      }

                  }

              }

              
              
          public static void main(String[] argv) {
                  
          new TelnetClient().telnet();
              }

          }


          /**
           * 管道類,將輸入流的數據寫入到輸出流中。
           * 是一個線程,可以獨立運行
           
          */

          class Pipe extends Thread {

              
          // 管道的輸入流和輸出流
              BufferedReader is;
              PrintStream os;

              
          /**
               * 構造方法,構造輸入輸出流
               * 
          @param is
               * 
          @param os
               
          */

              Pipe(InputStream is, OutputStream os) 
          {
                  
          this.is = new BufferedReader(new InputStreamReader(is));
                  
          this.os = new PrintStream(os);
              }

              
              
          /**
               * 線程體方法,將輸入流的數據寫入到輸出流
               
          */

              
          public void run() {

                  String line;
                  
          try {
                      
          // 讀取輸入流的數據
                      while ((line = is.readLine()) != null{
                          
          // 寫到輸出流中
                          os.print(line);
                          os.print(
          "\r\n");
                          os.flush();
                      }

                  }
           catch(IOException e){
                  }

              }

          }




                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 环江| 乐业县| 吉隆县| 诸城市| 丹寨县| 玉林市| 海淀区| 阳山县| 吴桥县| 武平县| 梁平县| 正宁县| 广平县| 汶上县| 乐安县| 通海县| 格尔木市| 秭归县| 龙里县| 安宁市| 蓝田县| 广水市| 德清县| 金坛市| 临安市| 特克斯县| 琼中| 兴业县| 吉林省| 西畴县| 北安市| 铜川市| 淄博市| 柏乡县| 项城市| 昌都县| 江都市| 康定县| 怀来县| 阜宁县| 卢湾区|