2011-10-21 4 views
1

J'ai une application de console Java, que je veux contrôler à partir d'un autre ordinateur. J'utilise la classe Socket pour envoyer des données à travers le filet et le pipeline pour relier le programme contrôlé à distance avec l'expéditeur et le programme Reader, comme le montre:contrôle de l'application de la console java à distance en utilisant cmd

Lecteur:

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

Auteur:

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

RemoteController:

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

maintenant je lance la télécommande et puis j'écris

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

dans une invite de commande pour tester chaque fois que cela fonctionne. Cela fonctionne parfois, parfois non, conseiller comment le faire fonctionner à chaque fois?

Répondre

0

Tout le problème était que les programmes Sender et Reader étaient connectés dans un ordre aléatoire au programme principal, ainsi l'ajout de Thread.sleep (200) a résolu mon problème, désolé pour le problème. PS: Si vous programmez en java (et cmd), essayez-le, je suis vraiment amusant je pense.

Questions connexes