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, botów: 0