2014-10-30 84 views
1

我對telnet不是很熟悉,所以我很感激任何願意的幫助。 我有智能插頭,可以通過telnet接口打開或關閉。 我總是通過命令提示符使用telnet連接到服務器Digi X4連接端口(通過> telnet)。如果我想打開/關閉插座,我現在必須輸入:「12 set pow = on/off」並按下回車鍵。 我想通過使用telnet客戶端的java來實現這一點。我現在可以連接到端口(感謝這個平臺上發佈的答案),但發送命令切換設備開啓/關閉對我來說很困難。我仍然需要輸入「12 set pow = on/off」並按下回車鍵。我希望Java發送這個命令。 以下是我的java代碼。我將不勝感激您的協助。 Bab發送一個字符串命令到套接字

public class TelnetConnection { 

    static TelnetClient tc = null; 

    public static void main(String[] a) throws Exception 
    { 
     String[] args = {"122.1222.181.45","8085"}; 
     System.out.println("arg value: "+args); 

     if(args.length < 1) 
     { 
      System.err.println("Usage: Error <remote-ip> [<remote-port>]"); 
      System.exit(1); 
     } 

     String remoteip = args[0]; 

     int remoteport; 

     if (args.length > 1) 
     { 
      remoteport = (new Integer(args[1])).intValue(); 
     } 
     else 
     { 
      remoteport = 7000; 
     } 

      tc = new TelnetClient(); 

     while (true) 
     { 
      boolean end_loop = false; 
      try 
      { 
       tc.connect(remoteip, remoteport); 


       Thread reader = new Thread (new TelnetClientExample()); 
       tc.registerNotifHandler(new TelnetClientExample()); 
       System.out.println("TelnetClientExample"); 

       reader.start(); 
       OutputStream outstr = tc.getOutputStream(); 
       PrintWriter out = new PrintWriter(outstr); 
       String buff = "11 set pow=on"; 
       //int ret_read = 0; 
       do 
       { 
        try 
        { 
         out.print(buff); 
         outstr.flush(); 
        } 
        catch (IOException e) 
        { 
         System.err.println("Error"); 
         end_loop = true; 
        } 
       } 
       while((true) && (end_loop == false)); 

       try 
       { 
        tc.disconnect(); 
       } 
       catch (IOException e) 
       { 
          System.err.println("Error"); 
       } 
      } 
      catch (IOException e) 
      { 
        System.err.println("Exception while connecting:" + e.getMessage()); 
        System.exit(1); 
      } 
     } 
    } 
} 

回答

0

嘗試tring buff = "11 set pow=on\n";服務器可能需要換行符來檢測結束命令。

順便說一句,無限發送到服務器的循環看起來令人擔憂。

0

您需要發送一個對應於'並按Enter'的行結束符。

Telnet中的行結束符定義爲\r\n