将字符串命令发送到套接字

时间:2014-10-30 19:18:31

标签: java sockets

我对telnet不是很熟悉,所以我很感激任何愿意的帮助。 我有智能插头,可以通过telnet接口打开或关闭。 我总是通过命令提示符使用telnet连接到服务器Digi X4连接端口(通过> telnet)。如果我想打开/关闭插座,我现在必须输入:" 12设置pow =开/关"然后按Enter键。 我想通过使用telnet客户端的java实现这一点。我现在能够连接到端口(感谢此平台上发布的答案),但发送命令到开关设备开启/关闭对我来说很难。我仍然要输入" 12设置pow =开/关"然后按Enter键。我希望Java发送这个命令。 下面是我的java代码。非常感谢你的帮助。巴布

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);
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

尝试tring buff = "11 set pow=on\n";服务器可能需要换行来检测命令结束。

顺便说一句,无限发送给服务器的循环看起来很令人担忧。

答案 1 :(得分:0)

您需要发送与'​​对应'的行终止符,然后按Enter键。

Telnet中的行终止符定义为\r\n