HTTP proxy server w javie

0

Cześć, chciałem napisać bardzo prosty proxy server, jednowątkowy bez żadnych udziwnień...w internecie można znaleźć wiele proxy serwerów które albo nie działają...albo są nazbyt skomplikowane.. chodzi mi o stworzenie prostego proxy, który po prostu przekazuje kompuniakaty z przeglądarki do serwera www i z powrotem.
Tak więc napisałem kawałek kodu w javie i nie wiem do końca czemu program przekazuje tylko jeden komunikat, odbiera jeden i zawiesza się... oto kod:

import java.io.*;
import java.net.*;
import java.util.*;
import sun.net.www.MessageHeader;

public class Proxy{
	
	public Proxy(){
		try {
			run(8081);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String arg[]){
		new Proxy();
	}
	
	public void run(int proxyPort) throws Exception{

		//Serwer połaczenie przeglądarka <-> proxy
		ServerSocket serverToBrowser = new ServerSocket(proxyPort);
		Socket client = serverToBrowser.accept();
		BufferedInputStream clientIn = new BufferedInputStream(client.getInputStream());
		BufferedOutputStream clientOut = new BufferedOutputStream(client.getOutputStream());
		
		
		while (true){

			//Odbieram dane z przeglądarki
			byte fromBrowser[] = read(clientIn);
			
			InputStream is = new ByteArrayInputStream(fromBrowser);
			MessageHeader msgServer = new MessageHeader(is);
			String host = msgServer.findValue("Host");

			//Serwer połączenie proxy <-> www, za każdym razem nowe połączenie
			Socket serverToWWW = new Socket(host, 80);
			BufferedInputStream serverIn = new BufferedInputStream(serverToWWW.getInputStream());
			BufferedOutputStream serverOut = new BufferedOutputStream(serverToWWW.getOutputStream());

			//Wysyłam dane do wwww
			serverOut.write(fromBrowser);
			serverOut.flush();
			System.out.println(new String(fromBrowser));

			//Odbieram dane z www
			byte fromWWW[] = read(serverIn);
			
			InputStream is2 = new ByteArrayInputStream(fromWWW);
			MessageHeader msgWWW = new MessageHeader(is2);
			String connection = msgServer.findValue("Connection");

			//Wysyłam dane do przeglądarki
			clientOut.write(fromWWW);
			clientOut.flush();
			System.out.println(new String(fromWWW));

			//zamykam połączenie proxy <-> www
			serverToWWW.close();
		}

	}

	//Czyta dane ze strumienia i zwraca tablicę bajtów
	public byte[] read(InputStream clientIn) throws Exception{
		byte[] buffer = new byte[3024];
		byte[] fromBrowser = null;
		int  bytesRead;
		
		//Czekaj dopuki nie ma danych w strumieniu
		while ( (bytesRead = clientIn.read(buffer))==0 );
		
		fromBrowser = new byte[bytesRead];
        
		//Kopiuj dane z bufora do tablicy
		fromBrowser=Arrays.copyOf(buffer, bytesRead);
		return fromBrowser;
	}

}

Podejrzewam, że kłopot tkwi w mojej funkcji czytającej ze strumienia dane... która przy braku odpowiedzi blokuje program...
Proszę o sugestie i podpowiedzi jak rozwiązać problem w programie.

0

Witam,i jak udało ci się rozwiązać ten problem? Jeśli tak,to jak?
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1