Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    4

    Invio dati errato tra socket

    Ciao a tutti, sto realizzando un web server in java...

    Ho un problema nella comunicazione tra socket.
    Quando ricevo i dati provenienti da un client nel web server mi succede che perdo il primo carattere trasmesso nello stream (questo vale solamente per alcuni caratteri tipo : G,H,O...) qualcuno sa spiegarmi il perche'???

    Grazie mille per il vostro aiuto...

    Qui sotto inserisco il codice che ho realizzato per la comunicazione tra client e web server... (metto solo le righe essenziali)

    Server
    input = sock.getInputStream();
    char intreceived = (char)input.read();

    Client
    OutputStream output = new FilterOutputStream(sock.getOutputStream());
    output.write(contenuto,0,byte_letti);

  2. #2
    Ma leggi un carattere alla volta? VVoVe:

    Comunque il codice che hai postato non è sufficente per fare una diagnosi...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    4
    Sisi leggo un carattere alla volta anche se mi sarebbe + comodo leggerte stringhe intere (purtroppo nn me le legge)...
    Ti posto il codice che ho scritto:

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Invio dati errato tra socket

    Originariamente inviato da SymonF
    Server
    input = sock.getInputStream();
    char intreceived = (char)input.read();

    Client
    OutputStream output = new FilterOutputStream(sock.getOutputStream());
    output.write(contenuto,0,byte_letti);
    Purtroppo non ti è chiaro come funziona l'I/O in Java.

    Il read() di InputStream ti permette di leggere dei byte, non dei caratteri (quindi quel cast a char non serve e non ha senso). Usare un FilterOutputStream poi è inutile. FilterOutputStream in genere lo si estende per creare dei "filtri" che possono trasformare i dati o per aggiungere nuove funzionalità di lettura.

    La domanda è: che cosa vuoi trasferire??? Dati binari? L'intero contenuto di un qualunque file così come è?? Delle righe di testo??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    4
    Lato Server:

    codice:
    Socket sock = socketserver.accept();
    InputStream input = sock.getInputStream();
    char intreceived = (char)input.read();
    questi sono i comandi per leggewre dal socket che utilizzo e leggo un carattere alla volta

    Lato Client:

    codice:
    Socket sock = new Socket("127.0.0.1", port);
    OutputStream output = new FilterOutputStream(sock.getOutputStream());
    //leggo un file e lo trasmetto
    FileInputStream file = null;
    	try{
    		file = new FileInputStream("Request.txt");
    	}catch(FileNotFoundException e){
    		System.out.println("File non trovato");
    		e.printStackTrace();
    	}
    	byte[] contenuto = new byte[5000];
    	int byte_letti = 0;
    	try{
    		byte_letti = file.read(contenuto);
    	}catch(IOException e){
    		e.printStackTrace();
    	}
    
    	while(byte_letti != -1){
    		try{
    			output.write(contenuto,0,byte_letti);
    			byte_letti = file.read(contenuto);
    		}catch(IOException e){
    			System.out.println("Si e' verificato un errore di qualche tipo");
    			e.printStackTrace();
    		}
    	}
    purtrppo mi da il problema che nn mi legge i primi caratteri...

    Se hai una soluzione magari con la lettura da parte del server di intere riche ti ringrazio!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    4
    Devo trasferire dei dati che nn sono altro che le richieste per il mio web server quindi... quindi dati binari penso...

  7. #7

    Re: Re: Invio dati errato tra socket

    Originariamente inviato da andbin

    Il read() di InputStream ti permette di leggere dei byte, non dei caratteri (quindi quel cast a char non serve e non ha senso).
    Si che ha senso, perchè un byte = un char (finchè la codifica non supera 255)

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: Invio dati errato tra socket

    Originariamente inviato da non_pervenuto
    Si che ha senso, perchè un byte = un char (finchè la codifica non supera 255)
    Ma non ha senso usare dei char se si devono trasferire dei dati binari!
    Continuo (e continuerò) a dire che è inutile fare cast a char, usare FilterOutputStream (non sapendo a cosa serve) o fare letture di singoli byte per volta se non si ha ben chiaro come funziona l'I/O in Java.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9

    Re: Re: Re: Re: Invio dati errato tra socket

    Originariamente inviato da andbin
    Ma non ha senso usare dei char se si devono trasferire dei dati binari!
    Continuo (e continuerò) a dire che è inutile fare cast a char, usare FilterOutputStream (non sapendo a cosa serve) o fare letture di singoli byte per volta se non si ha ben chiaro come funziona l'I/O in Java.
    Su questo sono pienamente d'accordo...

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non ho nemmeno letto tutto il post, ma come ho visto il filteroutputstream... penso che tu volessi usare un FileOutputStream, cosa per cui ti rimando all'api
    http://java.sun.com/javase/6/docs/ap...putStream.html

    poi, è sempre meglio fare un flush delle cose che stai scrivendo... per cui, qualsiasi sia il tuo stream di scrittura:

    codice:
    os.write(....);
    os.flush();
    os.close();
    e siamo sicuri (o.. più sicuri) che tutto quello che c'era da scrivere è stato scritto davvero. Comunque, segui il consiglio di andbin e vai a dare una letta ai flussi, le varie classi wrapper e il loro uso... c'è proprio un tutorial sull'argomento sul sito di java (http://java.sun.com) (e miliardi di altre pagine in internet)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.