Cliente/Servidor conectando à uma URL

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

Primeiramente sugiro voce criar mais classes para isso…

Entretanto,

para ler uma URL e fazer o DLD de um conjunto de arquivos:

import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

/**
 * <p>Copyright: Copyright (c) 2003</p>
 * @author Oziel Moreira Neto (oziel@oziel.com.br)
 * @version 1.0
 */
public class Downloader {
	
	private URL url;
	private HttpURLConnection connection;
	
	
	public Downloader(String uri) {
		try {
			url = new URL( uri );
		} catch (Exception e) {
			e.printStackTrace();	
		}
	}
	
	public void connect() {
		try {
			System.out.print(&quot;Connecting.. &quot;);
			connection = (HttpURLConnection) url.openConnection();
			connection.setRequestMethod(&quot;GET&quot;);
			connection.addRequestProperty(&quot;Cookie&quot;,&quot;SESSIONID=123494949449&quot;);
			connection.addRequestProperty(&quot;User-Agent&quot;,&quot;Mozilla/5.0&quot;);
			connection.addRequestProperty(&quot;Referer&quot;,&quot;http://site.com&quot;);
			connection.setUseCaches( true );
			connection.connect();
			System.out.println(&quot;Connected..: STATUS &quot;+connection.getResponseCode());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public byte[] read() throws Exception {
		int bytes = connection.getContentLength();
		byte[] file = new byte[ bytes ];
		System.out.println(&quot;Reading &quot;+ bytes + &quot; bytes&quot;);		
		InputStream ret = connection.getInputStream();
		
		int readed = ret.read();
		int pos = 0;
		while( readed &gt -1 ) {
			file[pos++] = (byte) readed;
			readed = ret.read();
		}
		System.out.println(&quot;Readed &quot;+ readed + &quot; bytes&quot;);	
		ret.close();
		return file;		
	}
	
	public void write(String fileName, byte[] content) throws Exception {
		FileOutputStream fos = new FileOutputStream( &quot;c://temp//arquivos//&quot;+fileName );
		fos.write( content );
		fos.close();
	}
	
	public void close() {
		try {
			if ( connection != null ) {
				connection.disconnect();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String a[]) {
		String pattern[] = new String [700];
		for (int i=0; i&lt=25; i++ ) {
			if ( i &lt= 9 ) {
				pattern[i] =&quot;http://site.com/arquivos/arquivo0&quot;+i+&quot;.ext&quot;;
			} else {
				pattern[i] =&quot;http://site.com/arquivos/arquivo&quot;+i+&quot;.ext&quot;;
			}
				
		}

		long init2 = System.currentTimeMillis();
		for ( int j=1; j&lt;pattern.length; j++) {
			try {
				long init = System.currentTimeMillis();
				System.out.println("Downloading from: "+ pattern[j] );
				Downloader m = new Downloader(pattern[j]);
				m.connect();
				byte[] file = m.read();
				System.out.println("Downloaded: "+ pattern[j]);
				String fileName = "varig"+j+"."+pattern[j].substring(45, pattern[j].length());
				System.out.println("Writing on disk: "+ fileName);
				m.write(fileName, file);
				m.close();
				long end = System.currentTimeMillis();
				long elapsed = end - init;
				System.out.println("Elapsed: " + elapsed + " ms");
				double rate = file.length / elapsed;
				System.out.println("Tranfer rate: "+ rate + " (bytes/ms) ");
			} catch (Exception e) {
				e.printStackTrace();
				break;
			}
		}
		long end2 = System.currentTimeMillis();
		long elapsed2 = end2 - init2;
		System.out.println("Total Elapsed: " + elapsed2 + " ms");
		
	}		
}

Olá

O que será este tal de DLD?

PS: Coloquei as tags code para que seu código tivesse alguma chance de ser lido.

[]s
Luca

Alguém sabe como resolver esse erro que ocorre durante a execução?

Baixando de: CLIENTE>>> http://www.inf.ufpr.br/apm04/prog/compara.c
Conectando.. Total Elapsed: 3 ms
java.net.MalformedURLException: no protocol: CLIENTE>>> http://www.inf.ufpr.br/apm04/prog/compara.c
	at java.net.URL.<init>(URL.java:537)
	at java.net.URL.<init>(URL.java:434)
	at java.net.URL.<init>(URL.java:383)
	at clientServ.Downloader.<init>(Downloader.java:20)
	at clientServ.Downloader.Download(Downloader.java:81)
	at clientServ.Servidor.DownloadSite(Servidor.java:55)
	at clientServ.Servidor.runServidor(Servidor.java:98)
	at clientServ.Servidor.main(Servidor.java:176)
java.lang.NullPointerException
	at clientServ.Downloader.connect(Downloader.java:29)
	at clientServ.Downloader.Download(Downloader.java:82)
	at clientServ.Servidor.DownloadSite(Servidor.java:55)
	at clientServ.Servidor.runServidor(Servidor.java:98)
	at clientServ.Servidor.main(Servidor.java:176)
java.lang.NullPointerException
	at clientServ.Downloader.read(Downloader.java:44)
	at clientServ.Downloader.Download(Downloader.java:83)
	at clientServ.Servidor.DownloadSite(Servidor.java:55)
	at clientServ.Servidor.runServidor(Servidor.java:98)
	at clientServ.Servidor.main(Servidor.java:176)