【问题标题】:remote java console application control using cmd使用 cmd 进行远程 Java 控制台应用程序控制
【发布时间】:2011-12-12 11:07:00
【问题描述】:

我有 Java 控制台应用程序,我想从另一台计算机控制它。我使用Socket类通过网络和管道发送数据,将远程控制程序与Sender和Reader程序连接起来,如图:

读者:

import java.io.*;
import java.net.*;
  public class Reader {
  //reads information from the remote controlled program
  public static void main(String[] args) throws Exception {
    Socket s = new Socket(args[0], Integer.parseInt(args[1]));
    PrintWriter bw = new PrintWriter(s.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String vstup;
    do {
        vstup = in.readLine();
        if(vstup==null) break;
        bw.println(vstup);
    } while(true);
    s.close();
  }
}

发件人:

import java.io.*;
import java.net.*;
public class Sender {
  //sends instruction to the remote controlled program
  public static void main(String[] args) throws Exception {
    Socket s = new Socket(args[0], Integer.parseInt(args[1]));
    BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String vstup;
    do {
        vstup = in.readLine();
        if(vstup==null) break;
        System.out.println(vstup);
    } while(true);
    s.close();
  }
}

远程控制器:

import java.net.*;
import java.io.*;
public class RemoteController {
  public static void main(String[] main) throws IOException {
    ServerSocket ss = new ServerSocket(Integer.parseInt(main[0]));

    System.out.println("Done, please connect the program.");
    Socket reader = ss.accept(); //reads what the program says
    System.out.println("reader connected");
    Socket writer = ss.accept(); //writes into the program
    System.out.println("writer connected");

    BufferedReader read = new BufferedReader(new InputStreamReader(reader.getInputStream()));
    PrintWriter write = new PrintWriter(writer.getOutputStream(), true);

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    for(int i = 0; i<5; i++) {
        write.println(br.readLine());
        System.out.println(read.readLine());
    }

    write.close();
    read.close();
    writer.close();
    reader.close();
    ss.close();
  }
}

现在我运行遥控器,然后我写

java Sender localhost 1234 | java SomeProgram | java Reader localhost 1234

进入命令提示符以在其工作时进行测试。它有时有效,有时无效,有什么建议如何让它每次都有效吗?

【问题讨论】:

    标签: java cmd pipelining


    【解决方案1】:

    所有的问题是 Sender 和 Reader 程序以随机​​顺序连接到主程序,所以添加 Thread.sleep(200) 解决了我的问题,抱歉烦人。 PS:如果你用java(和cmd)编程,试试吧,我觉得真的很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-02-11
      • 2015-08-17
      • 1970-01-01
      • 2011-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多