Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86

    [java]invio di più stringhe con socket tcp

    salve...
    volevo chiedervi....
    quando uso una socket tcp per fare una connessione...
    se dal client invio tre stringhe... ad esempio
    Stringa1="nome";Stringa2="cognome";Stringa3="indir izzo";
    poi come faccio a riceverle dal server separatamente...
    cioè per leggere una stringa si usa il readLine()
    ma cosa si accorge il server che mi sto riferendo al nome piuttosto che al cognome.
    la mia domanda è anche...
    come faccio ad associare altre 3 stringhe nel server al nome,cognome,indirizzo?
    e quindi riottenere nel server stringa1,stringa2,stringa3 ?
    grazie

  2. #2
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    volevo anke chiedervi...
    se invio una sola stringa fatta in questo modo:
    Stringa="nome/cognome/indirizzo";
    quando poi la ricevo...
    come faccio poi a spezzare la stringa in 3 parti utilizzando "/"....

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

    Re: [java]invio di più stringhe con socket tcp

    Originariamente inviato da nicola
    cioè per leggere una stringa si usa il readLine()
    ma cosa si accorge il server che mi sto riferendo al nome piuttosto che al cognome.
    Sei tu che devi stabile l'ordine in cui le stringhe vengono inviate. E questa "specifica" deve essere nota sia al client che al server.

    Originariamente inviato da nicola
    come faccio ad associare altre 3 stringhe nel server al nome,cognome,indirizzo?
    e quindi riottenere nel server stringa1,stringa2,stringa3 ?
    String nome = br.readLine();
    String cognome = br.readLine();
    String indirizzo = br.readLine();

    (ipotizzo l'uso di un BufferedReader)

    No?

    Originariamente inviato da nicola
    se invio una sola stringa fatta in questo modo:
    Stringa="nome/cognome/indirizzo";
    quando poi la ricevo...
    come faccio poi a spezzare la stringa in 3 parti utilizzando "/"....
    Il modo più semplice è quello di usare il metodo split() di String.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    io sto inviando in questo modo:
    dal CLINET (p è la variabile da cui prendo i dati)
    codice:
    private static ObjectInputStream risposta;
        private static ObjectOutputStream richiesta;
    ...
    String nome = p.getNome();
            		String Cognome = p.getCognome();
            		String Indirizzo = p.getIndirizzo();
    richiesta.writeChars(nome);
                richiesta.writeChars(Cognome);
                richiesta.writeChars(Indirizzo);
    richiesta.flush();
    ricevo nel SERVER:
    codice:
    ObjectInputStream richiesta;
            ObjectOutputStream risposta;
    String nome = richiesta.readLine();
                    	String cognome = richiesta.readLine();
                    	String indirizzo = richiesta.readLine();
    ora se provo a stampare il nome con:
    codice:
    System.out.println("STAMPO LE INFO SUL CONTO[ArchivioSingle](291): "+nome);
    mi stampa
    STAMPO LE INFO SUL CONTO[ArchivioSingle](291):□n□i□c□o□l□a□p□e□t□r□u□z□z□e□l□l□i□v□i□a□b□o □
    nicola è la stringa che ho inserito in nome
    petruzzelli in cognome
    e via bo in indirizzo....

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da nicola
    codice:
    richiesta.writeChars(nome);
                richiesta.writeChars(Cognome);
                richiesta.writeChars(Indirizzo);
    codice:
    String nome = richiesta.readLine();
                    	String cognome = richiesta.readLine();
                    	String indirizzo = richiesta.readLine();
    Stai usando male le classi e i metodi per l'I/O. Se da un lato usi una readLine(), dall'altro lato dovrai usare un qualcosa di "speculare", cioè un metodo che scriva una linea, quindi una serie di caratteri terminati da un newline. Ma non basta. Quando si inviano su degli stream di byte dei caratteri, c'è sempre la questione del charset usato per codificare i caratteri in una sequenza di byte!!

    Ora, se vai a leggere la documentazione di writeChars() nella classe java.io.DataOutput (è una interfaccia implementata da ObjectOutputStream, nota bene), vedrai che dice:

    Writes every character in the string s, to the output stream, in order, two bytes per character. [...] For each character, two bytes are actually written, high-order byte first [...]

    E nel server hai usato readLine() di ObjectInputStream che tra l'altro è pure un metodo deprecato (la documentazione dice che non converte in modo appropriato i byte in caratteri).


    Quindi:
    a) ObjectInputStream/ObjectOutputStream in genere si usano quando entra in ballo la "serializzazione" degli oggetti.
    b) Se devi inviare/ricevere stringhe su stream di byte, fai in modo da usare un charset che sia comune al client e al server.
    c) Se devi trasferire stringhe a "linee", fai in modo che da un lato venga scritta una linea (caratteri+newline) e dall'altra parte la lettura si aspetti la stessa cosa (caratteri+newline).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.