Estou com um programa SERVIDOR, e quero fazer com que ele conecte à
uma URL, baixa o arquivo que está na URL e faz uma chamada de
sistema para executar um compilador (por exemplo: javac
helloword.java)
Porém eu nao estou conseguindo implementar essas rotinas, vejam o
código abaixo do Servidor, e se alguém puder me ajudar, agradeço.
package ClienteServidor;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.lang.*;
public class Servidor extends JFrame{
/**Configura um server que receberah
* uma conexao de um cliente, executarah um programa
* enviarah o resultado para uma URL
*
*/
private JTextField enter;
private JTextArea display;
ObjectOutputStream output;
ObjectInputStream input;
public Servidor()
{
super("Servidor");
Container c = getContentPane();
enter = new JTextField();
enter.setEnabled(false);
enter.addActionListener(new ActionListener(){
public void actionPerformed( ActionEvent e )
{
sendData (e.getActionCommand());
}
}
);
c.add(enter, BorderLayout.NORTH);
display = new JTextArea();
c.add(new JScrollPane(display),
BorderLayout.CENTER );
setSize( 500, 350 );
show();
}
public void runServidor()
{
ServerSocket servidor;
Socket connection;
int counter = 1;
try{
//Passo 1: Cria um ServidorSoccket.
servidor = new ServerSocket( 7000, 100);
while (true){
//Passo 2: Espera uma conexao.
display.setText( "Esperando nova conexao do cliente...\n" );
connection = servidor.accept();
display.append( "Conexao " + counter + "recebida de: "
+ connection.getInetAddress().getHostName() );
//Passo 3: Obtem o fluxo de entrada e sa�da.
output = new ObjectOutputStream( connection.getOutputStream() );
output.flush();
input = new ObjectInputStream( connection.getInputStream() );
display.append( "\nGot I/O stream\n" );
//Passo 4: Processa a Conex�o.
String message = "SERVIDOR>>> Conexao efetuada!";
String message2 = "SERVIDOR>>> Cliente, entre com a URL e arquivo: http://...";
output.writeObject( message );
output.writeObject( message2 );
output.flush();
enter.setEnabled( true );
do {
try{
message = (String) input.readObject();
display.append("\n" + message );
display.setCaretPosition( display.getText().length() );
if ( message.equals("http://www.inf.ufpr.br/apm04/programas/helloworld.java")){
//Conecta a URL
URL url = new URL(message);
URLConnection connections = url.openConnection();
connections.connect();
/*// servidor conecta aa URL para ler arquivos
try {
System.out.println("Mensagem:" + getMensagemOut());
// realiza a conexão no servidor e na porta
setConexao(new Socket(message, 7080));
// cria um canal para receber dados
DataInputStream in = new DataInputStream(getConexao().getInputStream());
// cria um canal para enviar dados
DataOutputStream out = new DataOutputStream(getConexao().getOutputStream());
// envia mensagem do tipo String
out.writeUTF(getMensagemOut());
// aguardo resposta do servidor do tipo String
setMensagemIn(in.readUTF());
} catch (IOException Ex) { //não consegui conectar
JOptionPane.showMessageDialog(null,"Não é possível conectar ao servidor!", "Informação", JOptionPane.INFORMATION_MESSAGE);
}*/
}
}
catch (ClassNotFoundException cnfex ){
display.append("\nEntrada invalida" );
}
// Compilacao de programas
/* try{
Runtime oRun = Runtime.getRuntime();
oRun.exec("ls - ali > ~/arq.test");
System.out.println("Program");
}
catch (Exception e){
System.out.println("Erro");
}
*/
} while (!message.equals("CLIENTE>>> ENCERRAR"));
//Passo 5: Fecha a conexao.
display.append("\nUsuario encerra a conexao." );
String message3 = "Conexao Encerrada.";
output.writeObject(message3);
enter.setEnabled( false );
output.close();
input.close();
connection.close();
++counter;
}
}
catch (EOFException eof ){
System.out.println("Cliente encerrou a conexao." );
}
catch (IOException io ){
io.printStackTrace();
}
}
private void setMensagemIn(String string) {
// TODO Auto-generated method stub
}
private DataInputStream downloadFile(URL url, String diretorio){
return null;
//
}
private Socket getConexao() {
// TODO Auto-generated method stub
return null;
}
private void setConexao(Socket socket) {
// TODO Auto-generated method stub
}
private String getMensagemOut() {
// TODO Auto-generated method stub
return null;
}
private void sendData(String s)
{
try {
output.writeObject("SERVIDOR>>> " + s );
output.flush();
display.append("\nSERVIDOR>>> " + s );
}
catch (IOException cnfex ){
display.append("\nNao Ha conexao." );
}
}
public static void main( String args[] )
{
Servidor app = new Servidor();
app.addWindowListener( new WindowAdapter() {
public void windowClosing( WindowEvent e )
{
System.exit( 0 );
}
}
);
app.runServidor();
}
}