Need urgent help. Execution of .exe files by calling from java program

This program works fine for small .exe file (like displaying a number) that do not take input. But does not work for files which takes input.

Can anyone help me in finding the problem.

Server code :-

import java.io.*;

import java.net.*;

public class Server1 {

private Player[] players;

private ServerSocket server;

private ExecHelper exh;

String command = null;

String message = null;

public Server1() {

players = new Player[5];

try {

server = new ServerSocket( 12345, 5 );

System.out.println("Server started...");

System.out.println("Waiting for request...");

}

catch( IOException ioe ) {

ioe.printStackTrace();

System.exit( 1 );

}

} //end Server constructor

public void execute() {

for( int i = 0; i < players.length; i++ )

try {

players = new Player( server.accept() );

players.start();

}

catch( IOException ioe ) {

ioe.printStackTrace();

System.exit( 1 );

}

}

public static void main( String args[] ) {

Server1 ser = new Server1();

ser.execute();

System.exit( 1 );

}

private class Player extends Thread {

private Socket connection;

private ObjectOutputStream output;

private ObjectInputStream input;

public Player( Socket socket ) {

connection = socket;

try {

input = new ObjectInputStream( connection.getInputStream());

output = new ObjectOutputStream( connection.getOutputStream());

output.flush();

}

catch( IOException ioe ) {

ioe.printStackTrace();

System.exit( 1 );

}

}

public void run(){

try {

message = "Enter a command:";

output.writeObject( message );

output.flush();

do {

command = ( String ) input.readObject();

String osName = System.getProperty( "os.name" );

String[] cmd = new String[3];

if( osName.equals( "Windows 2000" )) {

cmd[0] = "cmd.exe";

cmd[1] = "/c";

cmd[2] = command;

}

else if( osName.equals( "Windows NT" ) ) {

cmd[0] = "cmd.exe" ;

cmd[1] = "/C" ;

cmd[2] = command ;

}

Runtime rt = Runtime.getRuntime();

Process proc = rt.exec( cmd );

exh = new ExecHelper( proc, output, input);

} while( !command.equals( "TERMINATE" ) );

}

catch( Throwable t ) {

t.printStackTrace();

}

}

} //end class Player

public class ExecHelper implements Runnable {

private Process process;

private InputStream pErrorStream;

private InputStream pInputStream;

private OutputStream pOutputStream;

private InputStreamReader isr;

private InputStreamReader esr;

private PrintWriter outputWriter;

private ObjectOutputStream out;

private ObjectInputStream in;

private BufferedReader inBuffer;

private BufferedReader errBuffer;

private Thread processThread;

private Thread inReadThread;

private Thread errReadThread;

private Thread outWriteThread;

public ExecHelper( Process p, ObjectOutputStream output, ObjectInputStream input ) {

process = p;

pErrorStream = process.getErrorStream();

pInputStream = process.getInputStream();

pOutputStream = process.getOutputStream();

outputWriter = new PrintWriter( pOutputStream, true );

in = input;

out = output;

processThread = new Thread( this );

inReadThread = new Thread( this );

errReadThread = new Thread( this );

outWriteThread = new Thread( this );

processThread.start();

inReadThread.start();

errReadThread.start();

outWriteThread.start();

}

public void processEnded( int exitValue ) {

try {

Thread.sleep( 1000 );

}

catch( InterruptedException ie ) {

ie.printStackTrace();

}

}

public void processNewInput( String input ) {

try {

out.writeObject( "\n" + input );

out.flush();

}

catch( IOException ioe ) {

ioe.printStackTrace();

}

}

public void processNewError( String error ) {

try {

out.writeObject( "\n" + error );

out.flush();

}

catch( IOException ioe ) {

ioe.printStackTrace();

}

}

public void println( String output ) {

outputWriter.println( output + "\n" );

}

public void run() {

if( processThread == Thread.currentThread()) {

try {

processEnded( process.waitFor());

}

catch( InterruptedException ie ) {

ie.printStackTrace();

}

}

else if( inReadThread == Thread.currentThread() ) {

try {

isr = new InputStreamReader( pInputStream );

inBuffer = new BufferedReader( isr );

String line = null;

while(( line = inBuffer.readLine()) != null ) {

processNewInput( line );

}

}

catch( IOException ioe ) {

ioe.printStackTrace();

}

}

else if( outWriteThread == Thread.currentThread() ) {

try {

String nline = null;

nline = ( String ) in.readObject();

println( nline );

}

catch( ClassNotFoundException cnfe ) {

//cnfe.printStackTrace();

}

catch( IOException ioe ) {

ioe.printStackTrace();

}

}

else if( errReadThread == Thread.currentThread() ) {

try {

esr = new InputStreamReader( pErrorStream );

errBuffer = new BufferedReader( esr );

String nline = null;

while(( nline = errBuffer.readLine()) != null ) {

processNewError( nline );

}

}

catch( IOException ioe ) {

ioe.printStackTrace();

}

}

}

}

}

-

Client code :-

// client.java

import java.io.*;

import java.net.*;

public class Client {

private ObjectOutputStream output;

private ObjectInputStream input;

private String chatServer;

private String message = "";

private Socket client;

public Client( String host ) {

chatServer = host;

}

private void runClient() {

try {

connectToServer();

getStreams();

processConnection();

}

catch( EOFException eofe ) {

System.err.println( "Client terminated connection ");

}

catch( IOException ioe ) {

ioe.printStackTrace();

}

finally {

closeConnection();

}

} //end method runClient

private void connectToServer() throws IOException {

System.out.println( "Attempting connection...\n");

client = new Socket( InetAddress.getByName( chatServer ), 12345);

System.out.println( "Connected to : "+ client.getInetAddress().getHostName());

}

private void getStreams() throws IOException {

output = new ObjectOutputStream( client.getOutputStream());

output.flush();

input = new ObjectInputStream( client.getInputStream());

}

private void processConnection() throws IOException {

while( true ){

try {

message = ( String ) input.readObject();

System.out.print( message );

InputStreamReader isr = new InputStreamReader( System.in);

BufferedReader br = new BufferedReader( isr );

String line = null ;

line = br.readLine();

output.writeObject(line);

output.flush();

}

catch( ClassNotFoundException cnfe) {

System.out.println( "\nUnknown object type received");

}

}

} //end processConnection

private void closeConnection() {

System.out.println( "\nClosing connection");

try {

output.close();

input.close();

client.close();

}

catch( IOException ioe ) {

ioe.printStackTrace();

}

}

public static void main( String args[] ) {

Client c;

if( args.length == 0 )

c = new Client( "127.0.0.1" );

else

c = new Client( args[0] );

c.runClient();

}

}

[8108 byte] By [Inoulena] at [2007-10-3 5:16:48]
# 1

I performed this type of operation, years ago, so I can't quote it off the top of my head, so instead I'll give you the following link...If I'm not mistaken the following link (if read all the way through) will get you fixed up or give you the ideas you need...

http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

Hope this helps...

c2gilla at 2007-7-14 23:23:29 > top of Java-index,Archived Forums,Socket Programming...
# 2
Just so you know, this question has been cross-posted al over the place (seems like a hundred times, sometimes multiple times in the same forum) and he has already received this advice a few times over.
masijade.a at 2007-7-14 23:23:29 > top of Java-index,Archived Forums,Socket Programming...
# 3
Thanks, I don't pay attention to cross-posting. Just try to help...Don't get me wrong, if he/she is cross-posting, I think it's rude to waste people's time, but you know that rant...<grin>Thanks...
c2gilla at 2007-7-14 23:23:29 > top of Java-index,Archived Forums,Socket Programming...