Ajuda com socket's

Pessoal,

Tenho uma classe para download de arquivo ou paginas, e agora estou criando um socket para que eu possa usar um programa chamado pryvox de modo que a cada chamada que eu faça ele percorra um caminho diferente.
Ou seja quando eu executar minha classe ela tem que fazer a requisição passar pelo privox.
Classe download

[code]
public class download {

Leitura teclado = new Leitura(); // instanciando classe

public void getpagina(String endereco) throws IOException{
try {
FileWriter writer = new FileWriter(new File(“temp1.htm”)); // criar o arquivo - colocar, true para append
PrintWriter grava = new PrintWriter(writer,true); // cria objeto para inserir texto, true faz append por linha
URL url = new URL(endereco); // instancia a classe url
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));// cria um leitor de buffer e recebe o input strem e o urlstrem que e o resultado da consulta.
String linha= new String("");// cria string linhas
while ((linha = reader.readLine()) != null){ // enquando o buffer não estiver vazio
grava.println(linha); // adiciona ao arquivo
grava.flush();
}
grava.close(); // fechar gravar
writer.close(); //fechar writer
}
catch(UnknownHostException ioe){
System.out.println(“Erro ao acessar a url desejada.”);
}
catch(SocketException ioe){
System.out.println(“Erro de protocolo TCP”);
}
catch(UnknownServiceException ioe){
System.out.println(“Erro ao ler a pagina”);
}
catch(EOFException ioe){
System.out.println(“Ouve uma interrupção ao gravar o arquivo”);
}
catch(FileNotFoundException ioe){
System.out.println(“A pagina requisitada ou caminho invalido”);
}
catch(CharConversionException ioe){
System.out.println(“Erro ao converter a url”);
}
catch(UnsupportedEncodingException ioe){
System.out.println(“The Character Encoding is not supported.”);
}
}
}[/code]

Agora estou tentando setar a porta do privox,e para isso pelo que entendi preciso usar um socket.
Criei este metodo para setar, mais como eu faço agora para o meu metodo download usar esse socket ?

Metodo que criei para definir socket

public void definesocket(){ try{ Socket s = null; //Declaro o socket cliente PrintStream ps = null;//Declaro a Stream de saida de dados s = new Socket("ip",porta); //Cria o socket com o recurso desejado na porta especificada ps = new PrintStream(s.getOutputStream()); //Cria a Stream de saida de dados ps.println(this.getpagina()); s.close(); } catch(IOException e){ System.out.println("Algum problema ocorreu ao criar ou enviar dados pelo socket."); } }

Mais uma coisa, fiz isso baseado na documentação do guj, pergunta o que eu sou cliente ou servidor ?
Pois quando faço download eu pego e passo a url e recebo a pagina.

Primeira coisa… qual protocolo o proxy fala? TCP ou HTTP?

HTTP, ele se utiliza da biblioteca do internet explorer

Este privox é um proxy?

SE ele for um proxy e se você precisar de autorização para que suas requisições saiam para a internet, então você precisa criar um java.net.Authenticator. É bem simples:

import java.net.Authenticator;
import java.net.PasswordAuthentication;


final class HTTPAuthenticator extends Authenticator {
	
	private String username, password;
	
	public HTTPAuthenticator(String username, String password) throws IllegalArgumentException{
		if((username == null) 
				|| (password == null)
				|| "".equals(username)
				|| "".equals(password)){
			throw new IllegalArgumentException();
		}
		this.username = username;
		this.password = password;
	}

	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
    	return new PasswordAuthentication(username, password.toCharArray());
    }

	
	
}

A partir disso, antes de você abrir qualquer socket, você define o seu autenticador como o padrão para conexões.

HTTPAuthenticator authenticator = new HTTPAuthenticator(username, password);
Authenticator.setDefault(authenticator);

E é só.