Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [java]realizzare classe per gestire vita socket

    salve, dovrei realizzare una classe java darichaimare poi dove occorrre che mi permetta di definre i metodi :
    sconenttiscket,connettisocket,invia e ricevi.
    qualcuno può aiutarmi??grazie mille

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

    Re: [java]realizzare classe per gestire vita socket

    Originariamente inviato da gattamelogna
    salve, dovrei realizzare una classe java darichaimare poi dove occorrre che mi permetta di definre i metodi :
    sconenttiscket,connettisocket,invia e ricevi.
    qualcuno può aiutarmi??grazie mille
    Così è un po' troppo vaga come richiesta. Innanzitutto parli di socket su TCP, vero? Poi devi inviare e ricevere che cosa di preciso?? Tieni presente che un socket su TCP è una connessione permanente tra 2 host (fino a che uno dei due chiude la connessione) e su cui viaggiano solamente dei byte "crudi". Sei poi tu che fai quello che si chiama "wrapping" (o "chaining") degli stream per poter inviare dei dati in un formato a te comodo.

    Ad esempio l'OutputStream fornito dal socket lo puoi usare per creare un DataOutputStream al fine di scrivere sul socket dei dati primitivi in modo portabile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao andrea,
    meno male ci sei tu!!cmq mi hanno detto di fare una classe che contenga tutti i metodi ad esempio socketconnessione che avrà in input ip, porta ed una varibile booleana che se è impostata a false allora bisogna scrivere sul socket, in caso contrario bisogna leggere.
    adesso il metodo l'ho fatto ma non so se ha la giusta logica per poter funzionare se vuoi lo posto.
    Grazie mille

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gattamelogna
    mi hanno detto di fare una classe che contenga tutti i metodi ad esempio socketconnessione che avrà in input ip, porta ed una varibile booleana che se è impostata a false allora bisogna scrivere sul socket, in caso contrario bisogna leggere.
    Come ho detto bisogna vedere cosa devi leggere e scrivere. Singoli byte? Stringhe? Altro?

    Originariamente inviato da gattamelogna
    adesso il metodo l'ho fatto ma non so se ha la giusta logica per poter funzionare se vuoi lo posto.
    Beh, postalo pure, così vediamo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    scusa prima non ho specificato che devo leggere e scrivere delle stringhe .
    cmq il metodo non so se è corretto è questo:
    codice:
     public void connect(String ip, int porta, boolean lettura){
            
            if(lettura=false){
                try{
                    socket=new Socket("ip",porta);
                    os=new DataOutputStream(socket.getOutputStream());
                    
                    while(lettura==false){
                        try{
                            Thread.sleep(1000);
                        }catch(InterruptedException ex){
                            System.out.println("Eccezione del thread "+ex);
                        }
                    }
                } catch(IOException e){
                    System.out.print("Eccezione "+ e);
                }
            } else{
                try{
                    socket=new Socket("ip",porta);
                    is=new DataInputStream(socket.getInputStream());
                    
                }catch(IOException e){System.out.println("Eccezione socket "+e);}
            }
        }

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gattamelogna
    scusa prima non ho specificato che devo leggere e scrivere delle stringhe .
    cmq il metodo non so se è corretto
    No, non mi sembra molto corretto. Già nel test if(lettura=false) hai messo una assegnazione (che, nota bene, tecnicamente compila ma non è quello che ti serve). Poi perché passi "ip" al Socket?? E perché fai un Thread.sleep(1000)??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Ma per Java non esistono frameworks ad alto livello che evitano questo lavoraccio?
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  8. #8
    ho messo lettura=false,(ok dovevo mettere lettura==false) perchè se è così vuol dire che mi serve un socket che scrive e che quindi utilizza lo stream di output in caso contrario un socket che legge e che quindi utilizza lo stream di input. sul fatto che passo ip non capisco perchè non va bene

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da gattamelogna
    ho messo lettura=false,(ok dovevo mettere lettura==false) perchè se è così vuol dire che mi serve un socket che scrive e che quindi utilizza lo stream di output in caso contrario un socket che legge e che quindi utilizza lo stream di input.
    A parte il fatto che se vuoi leggere .... la stringa come la restituisci se hai messo void come tipo di ritorno???

    Originariamente inviato da gattamelogna
    sul fatto che passo ip non capisco perchè non va bene
    Hai passato nel costruttore la stringa "ip", non ip (che comunque in generale contiene un host).

    Se proprio si volesse fare una classe per I/O di stringhe su socket, si potrebbe fare una cosa del genere:
    codice:
    class StringSocketIO
    {
        private Socket sock;
        private DataInputStream dis;
        private DataOutputStream dos;
    
        public StringSocketIO (String host, int port)
            throws UnknownHostException, IOException
        {
            sock = new Socket (host, port);
    
            dis = new DataInputStream (sock.getInputStream());
            dos = new DataOutputStream (sock.getOutputStream());
        }
    
        public String read ()
            throws IOException, EOFException
        {
            return dis.readUTF ();
        }
    
        public void write (String str)
            throws IOException
        {
            dos.writeUTF (str);
        }
    
        public void close ()
        {
            try {
                if (dis != null)
                    dis.close ();
            } catch (IOException ioe) { }
            try {
                if (dos != null)
                    dos.close ();
            } catch (IOException ioe) { }
            try {
                if (sock != null)
                    sock.close ();
            } catch (IOException ioe) { }
        }
    }
    (non l'ho provata)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    ok, mi trovocon il tuo ragionamento. acneh io ho i metodi per leggere , scrivere e chiudere il socket ieri ho postato solo quello della connessione perchè mi sembrava non andasse bene a livello logico.
    adesso il mio metodo scrivi è uguale al tuo se non fosse per i nomi asseganti alle variabile output stream, in questo caso se richiamo sull'oggetto StringSocketIO prima il metodo chemi apre la connessione e poi quello che invia al server la stringa mi lancia un'eccezione perchè la variabile output è stata dichiarata fuori ma è stata inizializzata nel metodo per la connessione.
    comuque scusami per la "stupidità" ma perchè il hai usato inserito tutto nel costruttore e non hai fatto un metodo per la connessione??
    grazie mille

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.