Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    21

    [JAVA] Comunicazione Client Server

    Ciao a tutti avrei un problema sulla comunicazione tra client e server. l'applicazione ke ho creato è lato client il problema è ke dopo aver inserito il primo comando mi legge la risposta del server ma nn mi permette di inserirne uno nuovo. Vi posto il codice x essere + kiaro
    codice:
    import java.io.*;
    import java.net.*;
    import java.util.Scanner;
    public class Client
    {
     public static void main(String[] args) throws IOException
     {
       if (args.length != 2)  System.exit(0);
       Scanner ingresso = new Scanner(System.in);
       Socket s = new Socket(args[0], Integer.parseInt(args[1]));
       
       InputStream in = s.getInputStream();
       OutputStream out = s.getOutputStream();
       
       BufferedReader input = new BufferedReader(new InputStreamReader(in));
       PrintWriter writer = new PrintWriter(out);
       
       while(true)
       {
         String command = ingresso.nextLine();
         writer.print(command);
         writer.flush();
       
         boolean done = false;
         while (!done)
         {
           String risp = input.readLine(); 
           if (risp == null) done = true; /* credo ke il problema potrebbe essere qui xkè nn riesce ad uscire dal ciclo */
           else System.out.println(risp);
         }
       }
    
     }
    }
    se mi potete aiutare mi fareste un grandissimo favore

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

    Re: [JAVA] Comunicazione Client Server

    Originariamente inviato da Franzis
    Ciao a tutti avrei un problema sulla comunicazione tra client e server. l'applicazione ke ho creato è lato client il problema è ke dopo aver inserito il primo comando mi legge la risposta del server ma nn mi permette di inserirne uno nuovo. Vi posto il codice x essere + kiaro
    Innanzitutto dovresti specificare e spiegare meglio con che tipo di server hai a che fare (l'hai fatto tu il server?).

    Poi vedo che fai: writer.print(command); cioè senza mandare alcun end-of-line. Sei sicuro che vada bene al server??
    E come risponde il server?? Cioè quale è il protocollo del server (e qui torniamo alla questione iniziale)?? Il problema del tuo codice è che sta lì ad aspettare nuove linee dal server. Sei sicuro che il server invii più linee? E come fa a marcare la fine della risposta??
    Queste cose le puoi sapere solo conoscendo il protocollo del server. Quest'ultimo infatti potrebbe rispondere con 1 sola riga, con più righe terminate magari da una riga vuota o ancora in altro modo!!

    Infine, se invece di mettere il throws sul main (che è concettualmente sbagliato) gestissi correttamente le eccezioni all'interno del main, sarebbe tanto di guadagnato!
    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
    Nov 2006
    Messaggi
    21
    allora ho sostituito print cn println perkè ho controllato su internet e ho visto ke l'end of line è \n.
    Quello della risposta del server dovrebbe essere lo stesso?
    cmq mi voglio connettere ad un server IRC

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Franzis
    allora ho sostituito print cn println perkè ho controllato su internet e ho visto ke l'end of line è \n.
    Il formato del "end-of-line" dipende dal sistema operativo, può essere
    - CR+LF (DOS/Windows)
    - LF (Linux/Unix)
    - CR (Mac)

    Comunque le classi di I/O per la lettura (es. BufferedReader) accettano tranquillamente un EOL in uno qualunque dei 3 formati.

    Originariamente inviato da Franzis
    Quello della risposta del server dovrebbe essere lo stesso?
    cmq mi voglio connettere ad un server IRC
    Allora dovresti leggere molto bene la documentazione del protocollo IRC:

    RFC 1459 - Internet Relay Chat Protocol

    In particolare dice:

    Servers and clients send eachother messages which may or may not generate a reply. If the message contains a valid command, as described in later sections, the client should expect a reply as specified but it is not advised to wait forever for the reply; client to server and server to server communication is essentially asynchronous in nature.
    [...]
    IRC messages are always lines of characters terminated with a CR-LF (Carriage Return - Line Feed) pair, and these messages shall not exceed 512 characters in length, counting all characters including the trailing CR-LF.

    Buona lettura.
    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
    Nov 2006
    Messaggi
    21
    ok studierò da lì grazie mille x le informazioni. ah ma x caso dal sito è possibile reperire guide di altri protocolli?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Franzis
    ma x caso dal sito è possibile reperire guide di altri protocolli?
    Quali protocolli? Basta che fai una ricerca in rete con google o su Wikipedia.
    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
    Nov 2006
    Messaggi
    21
    cmq sia nn ho capito bene il fatto del CR-LF. è un comando? un carattere? visto ke il server IRC utilizza quello cosa dovrei inviare?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Franzis
    cmq sia nn ho capito bene il fatto del CR-LF. è un comando? un carattere? visto ke il server IRC utilizza quello cosa dovrei inviare?
    Devi inviare 2 caratteri: '\r' e '\n' (rispettivamente hanno valore 13 e 10).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    21
    ciao ancora. Mi sono reso conto ke mi conviene gestire il problema utilizzando 2 thread uno x mandare messaggi e l'altro x leggere la risp. Volevo solo kiedere se mi conveniva al momento della creazione dell'oggetto specificare uno stringa x esempio .. new Client("send") e così scrivere il metodo run in base al valore della stringa ke nel mio caso potrà assumere solo 2 valori . Se questa soluzione nn è buona magari qualcuno potrebbe suggerirmene un altra

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    2
    ankio avrei lo stesso problema x esempio come posso fare 2 thread ke però gestiscano lo stesso socket? dikiarando la variabile socket statica? anke se vorrei che qualcuno mi indicasse il modo migliore per utilizzare i thread in questo caso cioè come impostare il programma.

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.