Originariamente inviato da peppem
Secondo me bisogna distinguere il concetto di socket da quello di richiesta http.
La socket è una porta sulla quale, finchè non si verifica una certa esigenza, passano dei dati.
La richiesta http produce un flusso di dati su una porta (es.80), In questo flusso ci sono delle "istruzioni" secondo il protocollo http che indicano a chi stà in ascolto(di solito un webserver, in questo caso la tua applicazione)come comportarsi.
Tu setti il proxy nel browser, dando indirizzo 127.0.0.1 e porta sulla quale la tua applicazione ascolta.
Quando generi una richiesta http dal tuo browser, tale richiesta viene passata al proxy, ma non è previsto che nella richiesta socket effettuata al proxy si indichi la fine dello stream (con valore -1) perchè potenzialmente il proxy(la tua applicazione è ancora in ascolto di altre richieste).
Dovresti capire (studiando il protocollo http) quando finisce una richiesta http.
Se non sbaglio una richiesta http termina quando trovi due /r/n consecutivi.
A tal punto raccogli i dati della richiesta http e li passi all'outputstream (Puoi usare direttamente array di byte, se devi semplicemente effettuare il travaso, senza bisogno di usare tokenizer e Stringhe varie).