Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14

Discussione: [java]inputstream

  1. #1
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103

    [java]inputstream

    oggi davvero non ce la faccio..
    vi prego di aiutarmi a risolvere sto problema..perche ci ho gia perso troppe ore..
    creo un inputstream:
    Codice PHP:
    InputStream StreamFromBrowser server.getInputStream(); 
    da qui leggo le richieste http dal mio browser!

    ora..perche nn esce mai da questo ciclo while??

    Codice PHP:
    while((StreamFromBrowser.read(req))!= -1){
                        
    requestC= new String(req,0,s);
                     
    StringTokenizer tok = new StringTokenizer(requestC);
                     
    tok.nextToken("//");
                     
    hosttok.nextToken();
                     
    System.out.println("\nrichiesta del client: " host+"\n");
                     
    System.out.print(requestC);
                 }
    if(....
    etcetc.. 
    che condizione devo mettere per sapere che il browser non ha piu richieste da fare??e cosi chiudere la socket?

    sono disperato!

  2. #2
    InputStream StreamFromBrowser = server.getInputStream();

    cos'è server?

  3. #3
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103
    ah gia scusa...è il nome della socket!
    grande peppem..ti prego aiutami...sono nelle tue mani!

  4. #4
    Allora server è una socket.

    Mi fai vedere come inizializzi la socket? magari incolla più codice cercando ovviamente di mettere solo quello che serve.

    Dici di leggere le richieste http del tuo browser.. cosa vuol dire che hai creato una serverSocket sul tuo pc, e attraverso il browser, digitando localhost:80.. catturi le richieste?

    Il ciclo va in loop sulla singola richiesta, giusto?

  5. #5
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103
    Originariamente inviato da peppem
    Allora server è una socket.

    Mi fai vedere come inizializzi la socket? magari incolla più codice cercando ovviamente di mettere solo quello che serve.

    Dici di leggere le richieste http del tuo browser.. cosa vuol dire che hai creato una serverSocket sul tuo pc, e attraverso il browser, digitando localhost:80.. catturi le richieste?

    Il ciclo va in loop sulla singola richiesta, giusto?
    esatto..
    allora nel main faccio questo..
    Codice PHP:
    ServerSocket ss = new ServerSocket(0);
              
    System.out.println("Server in on port: " ss.getLocalPort()+"\n\n");
                      while(
    true){
                                  (new 
    MyThread(ss)).start();
                     } 
    poi vado nel browser,e setto proxy in uscita su quella porta e su localhost..
    poi nella classe MyThread...
    Codice PHP:
    server=ss.accept();
                 final 
    OutputStream StreamToBrowser server.getOutputStream();
                  final 
    InputStream StreamFromBrowser server.getInputStream();
                 
    int s;
                 while((
    StreamFromBrowser.read(req))!= -1){
                       
    requestC= new String(req,0,s);
                    
    StringTokenizer tok = new StringTokenizer(requestC);
                    
    tok.nextToken("//");
                    
    hosttok.nextToken();
                    
    System.out.println("\nrichiesta del client: " host+"\n");
                    
    System.out.print(requestC);
                }
                            
                if(
    host.equals("prova")){
                    
    StreamToBrowser.write(pagina().getBytes());
              } 
    adesso sto provando cn una pagina di prova che ho creato io!
    se riesco a capire come funziona cosi..
    poi lo faccio per tutto..o no?
    il problema è che facendolo partire mi stampa giustamente la richiesta GET,ma non a risposta!NON ESCE DAL CICLO..
    se chiedo per una seconda volta la pagina "prova" esce dal ciclo..e ci rietra subito...

    quello che nn riesco a capire,è quando terminano le richieste del browser..in modo tale da cambiare la condizione del ciclo!

  6. #6
    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).

  7. #7
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103
    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).
    hai perfettamente ragione,e ci ho pensato anch io..
    le stringhe e i tokenizer li uso per fare altre cose..che per adesso nn sono importanti..!
    ogni richiesta HTTP termina con "\r\n\r\n"..e fin qui non ci piove..
    ma non posso metterla come condizione in quel ciclo..
    perche altrimenti mi prenderebbe solo la prima richiesta GET..
    e se una pagina è composta da corpo e 8 foto ad esempio..avrò 9 richieste!
    per adesso ragiono sempre con connessioni non persistenti!..
    capisci il mio problema?
    come faccio a capire che il browser nn ha piu richieste da mandare al server??

  8. #8
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103
    ciao peppem,mi sn informato ancora di piu ma nn sono arrivato ad una conclusione!
    la condizione che uso io tecnicamente è corretta:
    Codice PHP:
    while((StreamFromBrowser.read(req))!= -1){ 
    perche restituisce -1 quando non ha piu byte da leggere..ed è quello che voglio..
    se non che..
    il metodo .read è bloccante(ho appena scoperto che esistono metodi bloccanti)..e quindi appena diventa -1 si blocca in attesa di qualcosa di nuovo da leggere..per quello non mi esce mai dal ciclo!!

    credo sia tutto li il problema..
    puoi aiutarmi??

  9. #9
    La condizione è tecnicamente corretta.

    E' il browser che non è tenuto a dire che non ci sono più byte da leggere.

  10. #10
    Utente di HTML.it L'avatar di bonobo
    Registrato dal
    Sep 2008
    Messaggi
    103
    Originariamente inviato da peppem
    La condizione è tecnicamente corretta.

    E' il browser che non è tenuto a dire che non ci sono più byte da leggere.
    e come faccio??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.