Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [Java]inviare dati via socket

    Buongiorno a tutti.
    Oggi ho iniziato a studiare i socket con java, il che mi ha davvero confuso.
    Ho guardato la guida di questo sito per quanto riguarda questo aspetto, ma non ho capito una parte che adesso scrivo
    (codice per la creazione del server)
    codice:
    OutputStream s1out = s1.getOutputStream();
        BufferedWriter bw = new BufferedWriter(
         new OutputStreamWriter(s1out));
    
        // Il server invia la risposta al client
        bw.write(“Benvenuto sul server!\n”);
    
        // Chiude lo strema di output e la connessione 
        bw.close();
        s1.close();
        System.out.println(“Chiusura connessione effettuata\n”);
    Vi metto il link alla guida così potrete vedere l'intero codice.

    http://www.html.it/articoli/i-socket-4/

    Vorrei capire che cosa sta facendo il programma in questa fase, ovvero che cosa è s1, cosa è la classe BufferWriter ecc.

    Grazie in anticipo e...
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

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

    Re: [Java]inviare dati via socket

    Originariamente inviato da g.b99pm10
    Vorrei capire che cosa sta facendo il programma in questa fase, ovvero che cosa è s1, cosa è la classe BufferWriter ecc.
    OutputStream, OutputStreamWriter e BufferedWriter sono solo alcune delle classi di I/O presenti nel framework nel package java.io. L'intero package del I/O (salvo alcune classi particolari come File) è stato "modellato" basandosi su un noto design pattern che è il pattern "decorator". Alcune classi sono "componenti" finali (come FileOutputStream), altre sono dei "decoratori" che permettono di incapsulare o un componente o un altro decoratore, con lo scopo di aggiungere comportamento a runtime. Ogni classe di I/O è focalizzata su un solo o su pochi aspetti del I/O. Ecco il motivo per cui ha senso e serve avere più livelli di "decorazione".

    OutputStream tratta l'output solo a livello di byte, non "sa" nulla di altri tipi primitivi, caratteri e stringhe. OutputStreamWriter è un "decoratore" che incapsula un OutputStream e che è capace di scrivere stringhe e sequenze di caratteri. Questo già di per sé basterebbe per scrivere una stringa come quella "Benvenuto .....".
    In quell'esempio evidentemente si è voluto usare un BufferedWriter che incapsula un qualunque Writer ed è grado di scrivere stringhe, newline ma soprattutto ha la capacità di "bufferizzare" l'output. La scrittura sul Writer sottostante avviene o facendo flush (o al close) o al riempimento del buffer interno.

    Nell'esempio che hai postato, fare un solo bw.write seguito subito da un bw.close non fa beneficiare per nulla del "buffering".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie mille per la risposta, tuttavia avrei altre 2 dmande
    1) volevo chiedere se potessi, al posto di scrivere una stringa(in questo caso "Benvenuto sul server!\n") il contenuto per esempio di JTextField (così posso creare una pseudo chat con un mio amico).
    2) da dove lo ha preso quel s1?(OutputStream s1out = s1.getOutputStream(); )

    Grazie per l'attenzione
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Immagino che s1 sia il socket. Quello lo crei tu indicando host a cui collegarti (e la porta da utilizzare)

    edit:

    Nella guida c'è scritto chiaramente cos'è s1:


    codice:
       // Apre una connessione verso un server in ascolto
       // sulla porta 7777. In questo caso utilizziamo localhost
       // che corrisponde all’indirizzo IP 127.0.0.1
       System.out.println(“Apertura connessione…”);
       Socket s1 = new Socket (“127.0.0.1″, 7777);
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Scusate... la prossima volta guardo meglio
    comunque, ultimissima cosa...

    OutputStream s1out = s1.getOutputStream();-> questo serve per prendere l'output del client?

    BufferedWriter bw = new BufferedWriter( -----> questo, invece a cosa serve?
    new OutputStreamWriter(s1out));


    Grazie per l'attenzione

    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da g.b99pm10
    Grazie mille per la risposta, tuttavia avrei altre 2 dmande
    1) volevo chiedere se potessi, al posto di scrivere una stringa(in questo caso "Benvenuto sul server!\n") il contenuto per esempio di JTextField (così posso creare una pseudo chat con un mio amico).
    tuoTextField.getText() ti dà il testo.
    Occhio però a una serie di aspetti subdoli/delicati ma importanti: la gestione della interfaccia utente "gira" in un unico thread che è denominato EDT (Event Dispatch Thread). La comunicazione via socket può essere potenzialmente lenta o con alte latenze, pertanto per mantenere responsiva l'interfaccia utente dovresti gestire la comunicazione su socket in un thread separato. Con tutto quello che ne consegue/comporta a livello di sincronizzazione e altro.

    Finché "giocherelli" con i socket, nel senso di provare, sperimentare, allora puoi anche fare tutto nel EDT. Se vuoi fare qualcosa di un pochino più serio devi aver ben chiari questi aspetti che ho detto. Se li hai già chiari, ok, altrimenti c'è comunque una buona documentazione online da cui partire.

    Originariamente inviato da g.b99pm10
    OutputStream s1out = s1.getOutputStream();-> questo serve per prendere l'output del client?
    Serve a prendere il "flusso" di output del socket, su cui puoi scrivere.

    Originariamente inviato da g.b99pm10
    BufferedWriter bw = new BufferedWriter( -----> questo, invece a cosa serve?
    new OutputStreamWriter(s1out));
    L'ho spiegato prima cosa sono OutputStreamWriter e BufferedWriter. E prima ho anche dato qualche accenno sulla "filosofia" del package java.io
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Grazie mille... credo di aver risolto

    Ciao
    tutto si può fare, bisogna solo volerlo
    http://italybrain.altervista.org/

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.