Visualizzazione dei risultati da 1 a 8 su 8

Discussione: Stream di byte

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    8

    Stream di byte

    Ciao a tutti, spero di non essere troppo fuori argomento, dato che il mio programma java funziona come client.

    La mia intenzione è quella di realizzare uno stream di immagini,il server è costruito in c#, i suoi compiti sono quelli di catturare delle immagine, convertirle in array di byte e spedirle attraverso un socket con la classe networkStream.
    Dovrebbe essere funzionante in quanto ho costruito anche la parte client in c# e funzionava correttamente.
    Ora però dato che il client deve essere all'interno di un sito ho pensato di usare un applet in java, al momento son bloccato con la lettura dello stream in java.
    Praticamente il programma ha un timer ed ogni tot secondi legge lo stream in ingresso dal socket e lo converte in una immagine. Alla prima chiamata il tutto funziona correttamente arrivano i byte li converte e l'immagine è quella di partenza, poi dal secondo giro non arriva più nulla, il buffer di ingresso sembra essere saturo come che java non lo liberasse durante la lettura e ovviamente il server in c# rimane in attesa per scrivere.
    Premetto che di java me ne intendo poco.
    Qualche idea a riguardo?

    Di seguito il codice della classe chiamata dal timer:

    public void run(){
    try
    {
    if(inputStr.available() > 700)
    {
    BufferedImage bufim = ImageIO.read(inputStr);
    if(bufim != null)
    {
    File f = new File("D:\\prova.jpg");
    ImageIO.write(bufim, "jpg", f);
    }
    }
    }
    catch(Exception e){}
    }

    quello che si nota dal debug è che dal secondo ciclo in poi la BufferedImage è null come che dallo stream di ingresso non arrivasse più nulla

    Ringrazio in anticipo chiunque rispondesse.

    Cordialmente

    Marco

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se viene sollevata qualche eccezione, con quel codice la perdi e non potrai mai sapere che tipo di problema sussista.

    Modifica quel codice aggiungendo la riga in grassetto, quindi controlla nella Consolle di Java se ci sono delle eccezioni:
    codice:
    public void run(){
       try
       {
          if(inputStr.available() > 700)
          {
             BufferedImage bufim = ImageIO.read(inputStr);
             if(bufim != null)
             {
                File f = new File("D:\\prova.jpg");
                ImageIO.write(bufim, "jpg", f);
             }
          }
       }
       catch(Exception e){ e.printStackTrace(); }
    }
    Una domanda: l'applet è un "programmino" che funziona finchè non termina il metodo run()... da quel che vedo, tu invii una sola immagine... alla fine dell'invio il metodo run() termina... quindi controlla che questo sia esattamente il comportamento che desideri (se devi inviare più file, il metodo run() non deve terminare tra un invio e l'altro, ma dovresti prevedere un ciclo).


    PS: Utilizza i tag CODE per postare il codice...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    8
    ho inserito il codice in grassetto, ora controllo se lancia delle eccezzioni ma dubito perchè in debug andava liscio.

    La classe postata è una task di un timer quindi viene eseguita ad intervalli regolari, di seguito posto la classe di partenza:

    codice:
    public class TCPclient {
       public static void main(String argv[]) throws Exception
        {
         Socket clientSocket = new Socket("localhost", 2121);
         Timer     timer = new Timer();
              InputStream inputStr = clientSocket.getInputStream();
         TimerTask task = new TaskTimer(inputStr);
         timer.scheduleAtFixedRate(task, 130, 130);
        }
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    8
    forse ho trovato il perchè non funziona ma non ho idea del perchè succeda, il socket dopo la prima ricezione si chiude o comunque perde la connessione

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Il fatto che in debug funzionasse, quando si tratta di applet, non è mai una garanzia.

    Cosa numero 1: leggendo il codice ho visto che crei una Socket verso "localhost". Conosci le limitazioni per la sicurezza delle applet? Sai che non è possibile per un'applet aprire una socket verso un server che non sia quello da cui essa viene scaricata (a meno di eventuali firme per l'applet)?

    Cosa numero 2: se si tratta di un'applet, non ha molto senso creare un metodo main()... non che la cosa sia sbagliata dal punto di vista della programmazione, ma concettualmente un'applet è una mini-applicazione che gira all'interno di una pagina web, quindi non verrà mai invocato (se non esplicitamente) il metodo main.


    Cosa numero 3: non vedo dove e come viene invocata tale classe dall'interno dell'applet...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    8
    ops che vergongna , era una previsione in futuro di farlo girare come un applets, per ora sto solo provando se riesco a farlo funzionare, però se mi confermi che non c'e modo di esguirlo poi su una pagina web lascio perdere.

    Ps: comunque non dipende dal socket era un falso errore la connessione rimane stabile.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    C'è il modo di eseguirlo su una pagina WEB, ma devi avere bene in mente i dettagli implementativi.

    Finchè fai le prove in locale, probabilmente il server in C# girerà sulla tua macchina locale... quindi, server e client coincidono e tutto funziona.

    Nel momento in cui andrai a pubblicare l'applet su una pagina in internet le cose cambiano.

    1) Chi scarica l'applet non avrà il server C# che gira in locale, quindi una connessione verso "localhost" fallirebbe.

    2) Le restrizioni imposte per motivi di sicurezza prevedono che un'applet non possa stabilire connessioni (quindi aprire Socket) con server diversi da quello da cui essa è stata scaricata (quindi, se la pagina WEB risiede nel sito www.quellochesarà.it, l'applet potrà aprire connessioni solamente verso www.quellochesarà.it).

    3) Questo implica che il server C# dovrà obbligatoriamente girare all'interno di quel server (e qui devi verificare di avere sufficienti permessi di amministrazione per potercelo far girare, quindi escludi fin da subito tutti i servizi di hosting).

    4) Tramite la firma dell'applet puoi rimuovere la limitazione del punto 2. Puoi, cioè, fare in modo che l'applet apra una connessione verso un qualunque server, fermo restando il punto 3.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    8
    L'importante è che l'applet possa accedere ad un server diverso dall'host (poi imposterò il nome del server corretto ora c'e localhost per evitare di scrivere codice in più), mentre il programma c# dovrebbe girare su un computer che funge da server quindi non dovrebbero esserci problemi con la società di hosting.

    Il più è riuscirlo a farlo comunicare correttamente.

    In ogni caso grazie mille per la tua disponibilità a rispondere alle domande.

    Ciao

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.