Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [JAVA] socket Telnet

  1. #1

    [JAVA] socket Telnet

    Salve a tutti ..
    sto cercando di realizzare una classe che mi gestisse la ricezione e l'invio di comandi sulla interfaccia telnet.

    Pensavo che fosse semplice da realizzare con le java.net ma forse mi sbagliavo
    io ho scritto questo codice e con esso vedo che al pc con il server telent mi ci collego ma poi non vedo ne l'output del telent ne riesco a inviare comandi

    codice:
    package ConnTelnet;
    
    import java.io.*;
    import java.net.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class jtelnet {
    
        private BufferedWriter wr;
        private BufferedReader rd;
        private InetAddress addr;
        private SocketAddress sockaddr;
        private Thread th = new Thread();
    
        public jtelnet(String ip, int port) {
            try {
                System.out.println("pio Telnet");
                addr = InetAddress.getByName(ip);
                sockaddr = new InetSocketAddress(addr, port);
                Socket sock = new Socket();
                int timeoutMs = 2000; // 2 secondi
                sock.connect(sockaddr, timeoutMs);
                //invio dati
                wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
                //lettura dati
                rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                Read();
            } catch (Exception ex) {
                Logger.getLogger(jtelnet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
        @SuppressWarnings("static-access")
        private void Read() {
            try {
                wr.write("help\n");
                while (true) {
                    th.sleep(100);
                    String rl = rd.readLine();
                    if (rl != null) {
                        if (!rl.equals(null)) {
                            System.out.println("'" + rl + "'");
                        }
                    }
                }
            } catch (Exception ex) {
                Logger.getLogger(jtelnet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    nel mio main faccio

    codice:
    jtelnet term = new jtelnet("192.168.0.180", 23);
    ora ho provato la connessione con il terminale putty e funziona , non capisco dove sto sbagliando.

  2. #2
    ho modificato il codice .. ora riesco a leggere qualcosa anche se mi manca l'ultima riga della schermata del terminale dove c'è il prompt cosa che invece vedo invece vedo su putty ( in terminale telnet ), ma sopratutto non riesco a fare il write del comando.

    jtelnet.java
    codice:
    package ConnTelnet;
    
    import java.io.*;
    import java.net.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class jtelnet {
    
        private BufferedWriter wr;
        private BufferedReader rd;
        private InetAddress addr;
        private SocketAddress sockaddr;
        private Thread th = new Thread();
        private jTNetRead read;
        private jTNetWrite write;
    
        @SuppressWarnings("static-access")
        public jtelnet(String ip, int port) {
            try {
                System.out.println("pio Telnet");
                addr = InetAddress.getByName(ip);
                sockaddr = new InetSocketAddress(addr, port);
                Socket sock = new Socket();
                int timeoutMs = 5000;
                sock.connect(sockaddr, timeoutMs);
                //invio dati
                wr = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
                //lettura dati
                rd = new BufferedReader(new InputStreamReader(sock.getInputStream()));
                read = new jTNetRead(rd);
                write = new jTNetWrite(wr);
                write.vwrite.add("help\n\r");
                while (true) {
                    th.sleep(100);
                }
            } catch (Exception ex) {
                Logger.getLogger(jtelnet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    jTNetRead.java
    codice:
    package ConnTelnet;
    
    import java.io.BufferedReader;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class jTNetRead extends Thread {
    
        BufferedReader br;
    
        public jTNetRead(BufferedReader brs) {
            br = brs;
            this.start();
        }
    
        @Override
        public void run() {
            try {
                String str = "";
                do {
                    str = br.readLine();
                    System.out.println(str);
                } while (!str.equals("stop"));
            } catch (Exception ex) {
                Logger.getLogger(jtelnet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    jTNetWrite.java
    codice:
    package ConnTelnet;
    
    import java.io.BufferedWriter;
    import java.util.Vector;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class jTNetWrite extends Thread {
    
        BufferedWriter bw;
        Vector vwrite = new Vector();
        Thread th = new Thread();
    
        public jTNetWrite(BufferedWriter bws) {
            bw = bws;
            this.start();
        }
    
        @Override
        @SuppressWarnings("static-access")
        public void run() {
            try {
                String str = "";
                th.sleep(5000);
                do {
                    if (!vwrite.isEmpty()) {
                        str = (String) vwrite.get(0);
                        vwrite.remove(0);
                        bw.write(str);
                        System.out.print(str);
                    } else {
                        th.sleep(100);
                    }
                } while (!str.startsWith("exit") && vwrite.isEmpty());
            } catch (Exception ex) {
                Logger.getLogger(jtelnet.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    
        public Vector getVwrite() {
            return vwrite;
        }
    
        public void setVwrite(Vector vwrite) {
            this.vwrite = vwrite;
        }
    }
    Qualcuna sa darmi una mano ?
    grazie mille

  3. #3

    [JAVA] Socket Telnet

    Ciao,

    perchè riinventare la ruota quando già esistono librerie per farlo. Prova a dare un occhiata a questa libreria.

    http://sourceforge.net/projects/jtelnet/files/

  4. #4
    Grazie mille .. mi sai mica indicare un sito dove ci trovo qualche indicazione di come utilizzare questa classe ? o mi puoi passare un esempio ?

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.