Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86

    [java]problema con ricezione stringhe in Socket

    sto sbattendo da un sacco su sto cavolo di probelma!!!
    non riesco a ricevere le stringhe che invio....
    invio dal client con socket interi float boolean
    e riesco a riceverli ma le stringeh no...
    CLIENT:
    codice:
    private static ObjectOutputStream richiesta;
    richiesta = new ObjectOutputStream(socket.getOutputStream());
    richiesta.writeInt(1);            
                String saldoS = String.valueOf(saldo);
                String fidoS = String.valueOf(fido);  
                richiesta.writeChars(nome+"/");
                richiesta.writeChars(Cognome+"/");
                richiesta.writeChars(Indirizzo+"/");
                richiesta.writeChars(anno+"/");
                richiesta.writeChars(mese+"/");
                richiesta.writeChars(giorno+"/");
                richiesta.writeChars(saldoS+"/");
                richiesta.writeChars(fidoS+"/");
    richiesta.flush();
    SERVER:
    codice:
    int scelta = richiesta.readInt();           
                switch(scelta)
                {
                default:
                    break;
    
                case 1: // '\001' APERTURA CONTO
                {
                    boolean conFido = richiesta.readBoolean();
                    try
                    {
                    	System.out.println("E' STATA RICHIESTA LA CREAZIONE DI UN NUOVO CONTO[ArchivioSingle](301)\nconto con fido?: "+conFido);               	
                        
    					String s = richiesta.readLine();
    					System.out.println("E' S");
    .....
    in cosa sbaglio?.... and mi ha spiegato che ObjectOutput.... si usa implementando serializable...
    infatti alcuni oggetti da passare fanno farte di classi che estendono serializzable
    ...

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

    Re: [java]problema con ricezione stringhe in Socket

    Originariamente inviato da nicola
    in cosa sbaglio?
    L'avevo già spiegato in un altro tuo thread. Fai un uso sbagliato delle classi di I/O e dei metodi di scrittura/lettura.

    writeChars() scrive la stringa usando 2 byte per ogni carattere in formato big-endian (prima il byte più significativo). readLine() di ObjectInputStream è deprecato e non andrebbe usato. E nemmeno readLine() di BufferedReader andrebbe bene (a meno che tu imposti un encoding UTF-16 big-endian .....)

    Prima di partire in quarta con scritture/letture, dovresti prima di tutto studiare e pianificare bene il "protocollo" di comunicazione. Cioè decidere cosa i due host dovranno scambiarsi, intendo dire quali tipi di dati, in che modo e con quale sequenza.

    Devi scambiare solo stringhe? Oppure anche tipi di dati primitivi es. int, double ecc...?

    Tralasciando un momento il codice, potresti fare un esempio di "comunicazione" tra client e server??
    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 L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    ho bisogno di scambiare interi, boolean, float, object e stringhe
    ...
    potresti suggerirmi un esempio per vedere come un client scambia con un server tante informazioni....? (tipi di dati diversi)
    nel mio caso invio un untero ed un float...
    successivamente tante stringhe...
    ora ho capito che uso male i metodi di lettura scrittura....
    ma come devo fare per leggere le stringhe che invio....?
    puoi aiutarmi con un esempio...?

  4. #4
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    se puoi suggerirmi una guida per imparare come scambiare dati ed in che sequenza farlo...
    nel senso se invio tre stringhe come capisco quale leggerò dal server la prima e poi la seconda e così via...

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Non ci sono "guide", il protocollo lo devi "inventare" tu.

    Faccio un esempio: supponiamo che un client deve poter inviare al server dati di tipo int/String. Anche più di questi dati in sequenza qualunque, es. 1 int, poi 2 stringhe, poi 1 int, ecc...

    Il server deve essere ovviamente "preparato", cioè il protocollo deve stabilire cosa il server deve aspettarsi di volta in volta.

    Per esempio si potrebbe fare:

    Il client invia la linea di testo "I:123"
    Il server legge la linea e capisce che è un intero (deve estrarre e convertire il dato in int)

    Il client invia la linea di testo "Sippo"
    Il server legge la linea e capisce che è una stringa


    Ma si potrebbe anche fare a livello di byte:

    Il client invia un byte 01 (codice che noi prefissiamo per un int)
    Il server legge 1 byte
    Il client invia 4 byte binari con il valore del int
    Il server legge 4 byte perché è stato avvisato prima che è un int.

    Il client invia un byte 02 (codice che noi prefissiamo per una stringa)
    Il server legge 1 byte
    Il client invia 4 byte binari di un int che indica il numero di byte che seguono per la stringa e poi manda N byte della stringa (in quale charset è da stabilire)
    Il server è stato prima avvisato che è una stringa, quindi legge 4 byte della lunghezza e poi N byte per la stringa e la decodifica.


    Insomma, questo è un modo di procedere per studiare un protocollo di comunicazione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    potreste suggerirmi una guida dove leggere come realizzare le connessione client server?

  7. #7
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    ok...
    ma come preparo il server....
    cioè
    io invio un intero con writeInt...
    lo leggo con readInt
    per le stringhe....
    invio con writeChars...
    leggo con?...
    e poi....
    è corretto usare writeChars per invia una stringa?
    io invio...
    nome cognome indirizzo usando writeChars....
    è corretto utilizzarlo...
    se si come lo leggo?

  8. #8
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    ma and mi dici quale è il problema della domanda...
    mi hai detto ke sbaglio nell'usare I|O...
    che non posso leggere con readLine()....
    mi dici come fare per favore...
    mi stai facendo scemunire VVoVe: VVoVe: VVoVe: VVoVe: VVoVe:

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Calma ... innanzitutto vediamo la questione in generale. La prima cosa da decidere è se realizzare un protocollo di comunicazione testuale (tipicamente "a righe") o binario.
    Diversi protocolli utilizzati su internet sono testuali a righe. Uno che mi viene in mente è il POP3 (quello per leggere la posta). Altri sono totalmente binari, come il protocollo LDAP (però non chiedetemi come è fatto, perché non lo conosco).

    In genere o si usa uno o l'altro. Daltronde in Java i Reader/Writer sono orientati ai caratteri (e non puoi quindi scrivere byte "crudi") mentre gli stream sono orientati ai byte e solo con classi di livello più "alto" (come DataOutputStream) si possono scrivere tipi di dati primitivi in modo più "astratto".

    Purtroppo adesso non ho molto tempo. Domani posso postare qualche stralcio di codice per fare qualche esempio di cosa si può fare.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it L'avatar di nicola
    Registrato dal
    May 2007
    Messaggi
    86
    allora...
    il server deve innanzitutto poter gestire molti client, i tpi di dati che riceve non sono solo stringhe
    ma anche Object, int, boolean, e float
    detto questo.
    mi consiglieresti come fare?
    avevo da scegliere se gestire la connessione tramite SOCKET o RMI e mi sono lanciato sulle socket...
    per quanto riguarda il protocollo non ho nemmeno badato al tipo perchè non so come si faccia... mi sono limitato a vedere degli esempi di come realizzare un client ed un server con socket ed ho usato quelli

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 © 2026 vBulletin Solutions, Inc. All rights reserved.