Executando um aplicativo de um servidor para o outro

2 respostas
C

Olá pessoal,

Preciso desenvolver um código JAVA que vai rodar em um servidor Linux mas que precise “startar” um executável, via cmd, de um outro servidor Windows.
Sei que para o código, que vai estar no Linux, precisarei de um ‘Runtime.getRuntime().exec(“cmd /c start…”)’ associado a um ‘Process’.

Pergunta: Como indico o caminho - do servidor Windows - para iniciar a execução?

Valeu

2 Respostas

tiagosilveira

Amigo pesso que de um olhada então no Java RMI com ele vc vai conseguir fazer oque esta tentando…

J

Vc tá querendo conectar com outro servidor, é isso ??
Já tentou socket ??

Eu to fazendo algo semelhante... da uma olhada :

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {

    public static void main(String[] args) {

         
        //Declaro o ServerSocket
       
        ServerSocket sockt=null;

        //Declaro o Socket de comunicação
        
        Socket s= null;

        //Declaro o leitor para a entrada de dados
     
        BufferedReader entrada=null;
        BufferedReader saida=null;
        
        //String
         
         String in="";
        try{
        	
    while(true){
            
            //Cria o ServerSocket na porta 7000 se estiver disponível
             
             sockt = new ServerSocket(700);
             System.out.println("Servidor Ativo");

            //Aguarda uma conexão na porta especificada e cria/retorna o socket que irá comunicar com o cliente
           
            s = sockt.accept();
            System.out.println("Alguem conectado !!");
            
            //Cria um BufferedReader para o canal da stream da entrada de dados do socket s
           
            entrada = new BufferedReader(new InputStreamReader(s.getInputStream()));
			in=entrada.readLine();
			Runtime run = Runtime.getRuntime();
       		Process processo = run.exec("cmd /c start "+in);

         //Aguarda por algum dado e imprime a linha recebida quando recebe
            //System.out.println(entrada.readLine());
	}
          
            
        //trata possíveis excessões de input/output. Note que as excessões são as mesmas utilizadas para as classes de java.io
        
        }catch(Exception e){
        	            
            System.out.println("ERRO NO SERVER: ");e.printStackTrace();
            
            //System.out.println(e.getMessage());
        }

    }// fim main


}//fim classe
Eu posso via Telnet ou qualquer outra aplicação cliente passar comandos para executarem no sistema remoto,no caso, windows. Basta conectar o IP e a porta que esta definida em
sockt = new ServerSocket(700);
Exemplo: Telnet 10.1.0.12 700.

Ele funciona, mas o server abenda com mensagem de erro abaixo:

java.net.BindException: Address already in use: JVM_Bind
        at java.net.PlainSocketImpl.socketBind(Native Method)
        at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:331)
        at java.net.ServerSocket.bind(ServerSocket.java:318)
        at java.net.ServerSocket.<init>(ServerSocket.java:185)
        at java.net.ServerSocket.<init>(ServerSocket.java:97)
        at Server.main(Server.java:39)

O desafio é corrigir o erro mantendo o server no ar, além de prover comunicação com o processo e o sub-processo (que é a tela do cmd).
Assim eu não abro uma janela do DOS para cada palavra que eu digite.

Espero conseguir resolver isso...

Espero também ter ajudado de alguma forma.

Abraços !

Criado 27 de abril de 2006
Ultima resposta 12 de mai. de 2006
Respostas 2
Participantes 3