各位师兄:
  大家好,现在要做一个远程调用API取数据的程序。以前从来没有做过,真是一头雾水啊.需求是远程连接上服务器(IP如:202.101.XXX.XXX),用户名为:apitest 密码为:apipwd 登录成功后,直接运行指令:/opt/MagellanNMS/bin/gmdrapi,然后再输入指令:CREATE,即可收取数据了.
可是如何用JAVA程序来实现呢?听说Runtime.getRuntime().exec是来调用指令的,但不知如何用,还有就是,当输入指令:CREATE,即可收取数据了.要用什么来接收这些数据传回程序呢?嗨,真是从没搞过这东西,以前只做过SOCKET的方式收发数据.希望各位帮忙了,万分感谢.

解决方案 »

  1.   

    Runtime.getRuntime().exec是调用命令行的命令的方法,就如同你在WINDOWS下打开CMD然后输入notepad一样.在JAVA中两台机器互相通讯肯定是要通过流的.不知道你哪个CREATE是调的哪个程序?数据是什么形式的?
      

  2.   

    package mypro;import java.io.*;
    import java.net.*;public class Client {
      public static void main(String[] args) throws Exception {
        //连接到服务端
        java.net.Socket socket = new Socket("127.0.0.1", 9999);    java.io.PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        out.println("ok");
        out.println("C:/Program Files/Internet Explorer/IEXPLORE.EXE www.163.com");
        out.close();
        socket.close();
      }
    }
    package mypro;
    import java.net.*;
    import java.io.*;
    public class Service {
      //进程
      static java.lang.Process p=null;
      public static void main(String[] args)throws Exception{
        //在服务建立一个socket,监听9999端口
        java.net.ServerSocket s=new ServerSocket(9999);
        while(true){
          java.net.Socket socket = s.accept();
          //获得从客服端发过来的输入的字节流
          java.io.InputStream i = socket.getInputStream();
          //将字节流转换为字符流
          java.io.BufferedReader in = new BufferedReader(new InputStreamReader(i));      String cmd1 = in.readLine();
          String cmd2 = in.readLine();
          if (cmd1.equals("ok")) {
            if (p == null) {
              p = java.lang.Runtime.getRuntime().exec(cmd2);
            }
          }
          else if (cmd1.equals("no")) {
            if (p != null) {
              p.destroy();
            }
          }
          in.close();
          i.close();
          socket.close();
        }
      }
    }
      

  3.   

    TO lzcboy() 
      谢谢你的回答,但不知道你的代码中P是什么类型的变量,做什么的?
    还有就是现在的问题是:我只能做客户端,服务端是厂家定好的,就是一个API程序,我的客户端登录到他所指定的IP后(输入用户名和密码成功登录后),就直接调用他们的API即/opt/MagellanNMS/bin/gmdrapi,然后就是输入这个API中具体的指令如(CREATE即收取数据)。所以我没办法像以前写SOCKET程序那样自己来定义双方的通信协议。
     我是想
    1、既然Runtime.getRuntime().exec是调用命令行的命令的方法,就如同你在WINDOWS下打开CMD然后输入notepad一样,那么能不能在我的客户端程序里用Runtime.getRuntime().exec来运行:telnet 202.101.XXX.XXX,然后输入用户名和密码(用户名为:apitest 密码为:apipwd ),成功后就运行/opt/MagellanNMS/bin/gmdrapi,调用API,最后运行具体指令如CREATE
    2、如果上述方法可行,那么我在运行了CREATE后,客户端如何将收取的数据信息得到呢?