Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561

    Problema nel leggere e scrivere su una socket

    Devo scrivere e leggere da una socket tra un client ed un server dei byte e delle stringhe ed inoltre bufferizzare i dati.
    Per questo ho scritto queste righe di codice:

    socket=new Socket(InetAddress.getByName("localhost"),f.getPor t());
    writer = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream()));

    reader = new BufferedReader( new InputStreamReader(socket.getInputStream()));

    però così facendo ho problemi ... come posso fare ?


    tulipan

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

    Re: Problema nel leggere e scrivere su una socket

    Originariamente inviato da tulipan
    Devo scrivere e leggere da una socket tra un client ed un server dei byte e delle stringhe
    Cioè devi poter scrivere dei byte "sciolti" a cui possono seguire delle stringhe (o viceversa ... insomma un po' tutti e due)?? Allora va usato un altro approccio, ad esempio le classi DataInputStream/DataOutputStream.

    E comunque quando devi scrivere/leggere una stringa su uno stream di byte, è fondamentale la questione del charset. Con il tuo approccio di prima (OutputStreamWriter e InputStreamReader) usi per default il charset della piattaforma. Ma se il client usa un certo charset e il server un altro .. saresti panato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    si devo leggere e scrivere dei bytes "sciolti" seguiti da delle stringhe........scusa ma non ho capito il discorso del charset.....potresti essere più chiaro?


    tulipan

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulipan
    non ho capito il discorso del charset.....potresti essere più chiaro?
    Quando si deve trasformare una stringa in una sequenza di byte (o viceversa) bisogna sempre tenere in considerazione il charset.

    Il costruttore di OutputStreamWriter e di InputStreamReader che hai usato prima, usano il charset di default della piattaforma. Ma se client e server usano charset differenti?? E in ogni caso se il charset è uno di quelli che non possono rappresentare tutti i caratteri Unicode??
    In questi casi è meglio usare un charset ben preciso, ad esempio UTF-8 che non "perde" nulla nella (de)codifica.
    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
    Jan 2007
    Messaggi
    561
    Ho provato, seguendo le tue indicazioni, a scrivere questo:

    input = new BufferedReader( new DataInputStream(client.getInputStream()));

    ma mi da errore:mi dice che BufferedReader non può contenere un DataInputStream.
    Però devo per forza bufferizzare i dati e non posso farne a meno. Cosa faccio?

    p.s Io non devo convertire byte in stringhe o viceversa ma li devo solo trasmettere da entrambi i lati

    tulipan

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulipan
    input = new BufferedReader( new DataInputStream(client.getInputStream()));

    ma mi da errore:mi dice che BufferedReader non può contenere un DataInputStream.
    Però devo per forza bufferizzare i dati e non posso farne a meno. Cosa faccio?
    Non ti è chiaro il concetto del "chaining" ("wrapping") delle classi di I/O. Non ha senso quello che hai scritto.

    Avrebbe senso:
    InputStream (del socket) --> BufferedInputStream --> DataInputStream

    Poi leggi con readByte(), readUTF() ecc... di DataInputStream e sarebbe anche bufferizzato grazie a BufferedInputStream.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    561
    mi funziona che una bellezza e questo grazie unicamente a te...se era possibile darti un voto per il tuo intervento ti avrei dato 10 e lode...


    tulipan

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.