proxy i odbieranie danych z przeglądarki

0

Witam!

Piszę serwer proxy i mam pewnien problem.

Mam taki kod:

...
InetAddress addr = InetAddress.getByName(host);
int port = 80;
SocketAddress sockaddr = new InetSocketAddress(addr, port);

Socket proxyToWWW = new Socket();
int timeoutMs = 2000;  
proxyToWWW.connect(sockaddr, timeoutMs);


OutputStream serverOut = new BufferedOutputStream(proxyToWWW.getOutputStream());

// clientIn -> serverOut
String input = slurp(clientIn);
System.out.println(input);
serverOut.write(input.getBytes());
serverOut.flush();


BufferedReader serverIn = new BufferedReader(new InputStreamReader(
                proxyToWWW.getInputStream()));

String fromServer;
while ((fromServer = serverIn.readLine()) != null) {
    System.out.println("Server: " + fromServer);  //TUTAJ!
}

...

Funkcja slurp():

private String slurp (InputStream in) throws IOException {
    System.out.println("START slurp");
    StringBuffer out = new StringBuffer();
    byte[] b = new byte[4096];
    for (int n; (n = in.read(b)) != -1;) {
        out.append(new String(b, 0, n));
    }
    System.out.println("END slurp");
    return out.toString();
}

Kiedy przeglądarka łączy się z moim serwerem proxy to wczytuje stronę w nieskończoność. Dopiero kiedy w przeglądarce wcisnę przycisk "stop" to kod "rusza dalej" i pobiera dane z www i wypisuje je na konsoli (w miejscu które oznaczyłem komentarzem TUTAJ!).

Problem prawdopodobnie polega na tym, że dopóki w przeglądarce nie wcisnę "stop" to program jest zatrzymany w funkcji slurp() w miejscu in.read(b).

Proszę o podpowiedź co może być źle.

0

Rozwiązałem problem następująco:

    private String slurp (InputStream in) throws IOException {
        String returnString = "";
        System.out.println("START slurp");
        if(in.available() > 0)
        {
            StringBuffer out = new StringBuffer();
            byte[] b = new byte[4096];

            //int n;
            for (int n; (n = in.read(b)) != -1;) {
                out.append(new String(b, 0, n));
            }
            returnString = out.toString();
        }
        System.out.println("END slurp");
        return returnString;
    }

Tylko mam kolejny problem. Takei coś działa tylko lokalnie. To znaczy: jak łaczę się z adresem localhost to dane są ładnie pobierane, natomiast jak próbuję pobrać np. z google.pl to nie pobiera nic (wartość w in.available() jest równa 0). Czy to problem samego programu czy może jakiś ustawień sieci u mnie (choć wątpię w to drugie, bo próbowałem na dwóch różnych komputerach w dwóch różnych sieciach).

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