Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint
Dal palco di Proofpoint Protect 2025 emerge la strategia per estendere la protezione dagli utenti agli agenti IA con il lancio di Satori Agents, nuove soluzioni di governance dei dati e partnership rafforzate che ridisegnano il panorama della cybersecurity
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti
Dopo alcuni anni di assenza dai cataloghi dei suoi televisori, Hisense riporta sul mercato una proposta OLED che punta tutto sul rapporto qualità prezzo. Hisense 55A85N è un televisore completo e versatile che riesce a convincere anche senza raggiungere le vette di televisori di altra fascia (e altro prezzo)
Recensione Borderlands 4, tra divertimento e problemi tecnici
Recensione Borderlands 4, tra divertimento e problemi tecnici
Gearbox Software rilancia la saga con Borderlands 4, ora disponibile su PS5, Xbox Series X|S e PC. Tra le novità spiccano nuove abilità di movimento, un pianeta inedito da esplorare e una campagna che lascia al giocatore piena libertà di approccio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 23-08-2003, 19:44   #1
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
Socket,java e JTextArea...

sto imparando a usare i socket con java e vorrei poter stampare in una JTextArea i comandi che mi invia il server però ogni volta che il server mi invia un comando mi si riapre una JTextArea mentre io vorrei che mi rimanesse aperta sempre la stessa e che i messaggi si accodassero uno dietro l'altro...ecco il codice del mio programma
Codice:
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
public class irc {
    public static void main(String[] args) {


String pong="",pon="",comandi="",prova="";
char po[];

po = new char[9];
        Socket smtpSocket = null;
        PrintStream os = null;
        DataInputStream is = null;
        JTextArea outputarea = new JTextArea(30,30);


     try {

            smtpSocket = new Socket("irc.tin.it", 6667);
            os = new PrintStream(smtpSocket.getOutputStream());
            is = new DataInputStream(smtpSocket.getInputStream());

        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: hostname");
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: hostname");
        }


 if (smtpSocket != null && os != null && is != null) {
            try {


   os.println("user user hostname ip :user");
   os.println("nick guest1");

   pong = is.readLine();
   pong.getChars(5,13,po,0);
   for (int i=0;i<9;i++)
    pon += po[i];
            System.out.println("pong="+pon);
            System.out.println(pong);
            os.println("pong "+pon);

    String responseLine;
        while ((responseLine = is.readLine()) != null) {
           System.out.println("Server: " + responseLine);
           prova += responseLine;
          outputarea.append(responseLine);
           JOptionPane.showMessageDialog(null,outputarea,"messaggio",
           JOptionPane.INFORMATION_MESSAGE);
             if (responseLine.indexOf("Ok") != -1) {
             break;
         }

    }
            os.close();
            is.close();
            smtpSocket.close();
            } catch (UnknownHostException e) {
                System.err.println("Trying to connect to unknown host: " + e);
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }
    }
}
help me please!

Ultima modifica di SteR9 : 23-08-2003 alle 19:47.
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 20:27   #2
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
E' sufficiente eliminare l'uso di JOptionPane e sostituirlo con una finestra, sempre visibile, a cui connetti la JTextArea:

Ad esempio:

Codice:
public static void main(String[] a) {
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();

  ecc.  ecc.
Puoi eliminare direttamente la chiamata a "showMessageDialog"

Codice:
JOptionPane.showMessageDialog(null,outputarea,"messaggio",
JOptionPane.INFORMATION_MESSAGE);
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 20:48   #3
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
Quote:
Originariamente inviato da PGI

non ho ancora studiato il jframe quindi basta che aggiungo ?
Codice:
public static void main(String[] a) {
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 21:23   #4
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
ok sono riuscito...e se ora volessi inviare un comando al server??
dovrei usare un action listener?
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 23-08-2003, 22:01   #5
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
E' più lungo a dirsi che a farsi:

ti serve un'area di testo o un campo, a seconda che tu voglia inviare una o più linee di testo insieme. Poi imposti il layout del JFrame in modo che il componente di testo venga visualizzato con un minimo di coerenza:
Codice:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
...

class...
...
static JTextField testoOut=new JTextField();
...
public static void main(String[] a) {
 JFrame frame=new JFrame("Titolo");
 JTextArea outputArea=new JTextArea();
 frame.getContentPane().setLayout(new BorderLayout());
 frame.getContentPane().add(testoOut, BorderLayout.SOUTH);
 frame.getContentPane().add(outputArea, BorderLayout.CENTER);
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setSize(400,400);
 frame.show();
...ecc...
Ora hai una finestra per "invio e ricezione";

Aggiungi a "testoOut" un gestore di eventi che reagisca alla pressione del tasto "enter" (il metodo più intuitivo per l'invio di testo da componenti a linea singola):
Codice:
testoOut.addKeyListener(new KeyAdapter() {
  public void keyPressed(KeyEvent ke) {
    if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
      inviaTestoAlServer();
    }
  }
});
"inviaTestoAlServer()" è un metodo che dovresti creare, il cui scopo è inviare testo sullo stream "os".

Codice:
 static void inviaTestoAlServer() {
   os.println(testoOut.getText());
 }
Ho scritto "al volo" ma dovrebbe essere tutto. In caso sono qui (magari tardi ma rispondo )
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 06:46   #6
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
mi da questo errore nella funzione keyPressed
identifier> expected
testoOut.addKeyListener(new KeyAdapter() {

Ultima modifica di SteR9 : 24-08-2003 alle 07:05.
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:00   #7
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
controlla la successione di parentesi e la presenza di un punto e virgola al termine della settima linea.

Il codice seguente è corretto :

Codice:
    testoOut.addKeyListener(new KeyAdapter() {
      public void keyPressed(KeyEvent ke) {
        if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
          //
        }
      }
    });
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:02   #8
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
posto il codice che facciamo prima...

Codice:
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class irc extends Frame implements KeyListener{

 testoOut.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent ke) {
      if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
        inviaTestoAlServer();
      }
    }
  });
    static void inviaTestoAlServer() {
    os.println(testoOut.getText());
    }

public static void main(String[] args){

  JTextField testoOut=new JTextField();
  JTextArea outputarea = new JTextArea();
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  frame.getContentPane().add(testoOut, BorderLayout.SOUTH);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();
  String pong="",pon="",comandi="",prova="";
  char po[];

  po = new char[9];
        Socket smtpSocket = null;
        PrintStream os = null;
        DataInputStream is = null;



     try {

            smtpSocket = new Socket("irc.dal.net", 6667);
            os = new PrintStream(smtpSocket.getOutputStream());
            is = new DataInputStream(smtpSocket.getInputStream());

        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: hostname");
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: hostname");
        }


 if (smtpSocket != null && os != null && is != null) {
            try {


   os.println("user user hostname ip :user");
   os.println("nick guest2993");

   pong = is.readLine();
   pong.getChars(5,13,po,0);
   for (int i=0;i<9;i++)
    pon += po[i];
            System.out.println("pong="+pon);
            System.out.println(pong);
            os.println("pong "+pon);

    String responseLine;
        while ((responseLine = is.readLine()) != null) {
           System.out.println("Server: " + responseLine);
           prova += responseLine;
          outputarea.append(responseLine + "\n");
             if (responseLine.indexOf("Ok") != -1) {
             break;
         }

    }
            os.close();
            is.close();
            smtpSocket.close();
            } catch (UnknownHostException e) {
                System.err.println("Trying to connect to unknown host: " + e);
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }
    }

}
grazie
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:14   #9
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Bel macello

All'esterno di un metodo in Java puoi inizializzare variabili ma non usare gli oggetti inizializzati.

testoOut.addKeyListener(...)

va a finire nel main.

Non è necessario che "irc" estenda Frame né che implementi KeyListener. O meglio, sarebbe il modo più "Java-style" di costruire l'applicazione, ma devi rimaneggiare ampiamente il codice per portarlo su quella strada.

PrintStream os = null; dovrebbe diventare

static PrintStream os= null;

e finire in un'area di visibilità di classe (quella in cui al momento si trova testoOut.addKeyListener(...) )

Così dovrebbe "andare"
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:21   #10
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
mmm non ho ben capito cosa devo fare....
in pratica lui non riconosce testoOut??
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:25   #11
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Non solo, anche se avessi dichiarato la variabile testoout "prima" comunque non avresti potuto attaccargli un keyListener.

Se mi dai 5 minuti ti sposto le linee di codice che andrebbero spostate e le evidenzio in grassetto, così tagliamo la testa al toro
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:35   #12
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Così dovrebbe compilare correttamente. Dovrebbe anche funzionare.

Codice:
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.awt.event.*;
public class temp /*extends Frame implements KeyListener*/{

/* testoOut.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent ke) {
      if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
        inviaTestoAlServer();
      }
    }
  });*/
  
  static JTextField testoOut = new JTextField();
  
  static PrintStream os = null;
  
  static void inviaTestoAlServer() {
    if(os!=null) {
    	os.println(testoOut.getText());
    }
  }

public static void main(String[] args){

  //JTextField testoOut=new JTextField();
  
  //******************************************
	testoOut.addKeyListener(new KeyAdapter() {
    public void keyPressed(KeyEvent ke) {
      if(ke.getKeyCode()==KeyEvent.VK_ENTER) {
        inviaTestoAlServer();
      }
    }
  });  
  //******************************************
  
  JTextArea outputarea = new JTextArea();
  JFrame frame=new JFrame("Titolo");
  frame.getContentPane().add(outputarea);
  frame.getContentPane().add(testoOut, BorderLayout.SOUTH);
  //la riga seguente è una funzione standard da sostituire
  //con una chiusura dell'applicazione più consona
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  frame.setSize(500,500);
  frame.show();
  String pong="",pon="",comandi="",prova="";
  char po[];

  po = new char[9];
        Socket smtpSocket = null;
        /*PrintStream os = null;*/
        DataInputStream is = null;



     try {

            smtpSocket = new Socket("irc.dal.net", 6667);
            os = new PrintStream(smtpSocket.getOutputStream());
            is = new DataInputStream(smtpSocket.getInputStream());

        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: hostname");
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: hostname");
        }


 if (smtpSocket != null && os != null && is != null) {
            try {


   os.println("user user hostname ip :user");
   os.println("nick guest2993");

   pong = is.readLine();
   pong.getChars(5,13,po,0);
   for (int i=0;i<9;i++)
    pon += po[i];
            System.out.println("pong="+pon);
            System.out.println(pong);
            os.println("pong "+pon);

    String responseLine;
        while ((responseLine = is.readLine()) != null) {
           System.out.println("Server: " + responseLine);
           prova += responseLine;
          outputarea.append(responseLine + "\n");
             if (responseLine.indexOf("Ok") != -1) {
             break;
         }

    }
            os.close();
            is.close();
            smtpSocket.close();
            } catch (UnknownHostException e) {
                System.err.println("Trying to connect to unknown host: " + e);
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }
    }

}
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 13:42   #13
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Ho dimenticato una linea.

E' meglio che la linea di testo presente nel JTextField venga resettata dopo l'invio...a dire il vero è l'unico modo per inviare più comandi

Codice:
  static void inviaTestoAlServer() {
    if(os!=null) {
    	os.println(testoOut.getText());
        testoOut.setText("");
    }
  }
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 14:01   #14
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
funziona alla grande,ti ringrazio!
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 14:38   #15
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
e se volessi aggiungere uno scroller??che funzione devo usare??
perchè quando il testo diventa lungo sparisce...
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 15:36   #16
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
La semplicità delle librerie Java ci viene in aiuto.

Occorre usare un "JScrollPane"

cambia questa riga

frame.getContentPane().add(outputarea);

con queste due

JScrollPane scroller=new JScrollPane(outputarea);
frame.getContentPane().add(scroller);

e il gioco è fatto.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 16:00   #17
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
Quote:
Originariamente inviato da PGI
La semplicità delle librerie Java ci viene in aiuto.

Occorre usare un "JScrollPane"

cambia questa riga

frame.getContentPane().add(outputarea);

con queste due

JScrollPane scroller=new JScrollPane(outputarea);
frame.getContentPane().add(scroller);

e il gioco è fatto.
perfetto però non scende automaticamente...non si può far si che scenda automaticamente ogni nuova linea?
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 16:10   #18
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Quote:
Originariamente inviato da SteR9
perfetto però non scende automaticamente...non si può far si che scenda automaticamente ogni nuova linea?
Tutto si può fare!

Devi impostare la posizione del cursore nell'area di testo usando come indice la lunghezza del testo contenuto nell'area.

dopo la linea

outputarea.append(responseLine + "\n");


aggiungi questa

outputarea.setCaretPosition(outputarea.getText().length());
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 17:03   #19
SteR9
Senior Member
 
L'Avatar di SteR9
 
Iscritto dal: Jun 2002
Città: Milano
Messaggi: 959
visto che sto tentando di creare un client irc ora vorrei poter scrivere in un altro JFrame ciò che viene scritto nel canale,mi è abbastanza chiaro come fare,ma non ho ben chiaro come "estrarre" solo ciò che viene scritto nel canale....
non esiste un tutorial sulla creazione di un client??con anche tutti i comandi che può ricevere un server irc...
SteR9 è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2003, 17:08   #20
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Per un tutorial sinceramente non saprei dove indirizzarti. Vediamo se qualcun'altro interviene.
PGI è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Cybersecurity: email, utenti e agenti IA, la nuova visione di Proofpoint Cybersecurity: email, utenti e agenti IA, la nuo...
Hisense A85N: il ritorno all’OLED è convincente e alla portata di tutti Hisense A85N: il ritorno all’OLED è convi...
Recensione Borderlands 4, tra divertimento e problemi tecnici Recensione Borderlands 4, tra divertimento e pro...
TCL NXTPAPER 60 Ultra: lo smartphone che trasforma la lettura da digitale a naturale TCL NXTPAPER 60 Ultra: lo smartphone che trasfor...
Un fulmine sulla scrivania, Corsair Sabre v2 Pro ridefinisce la velocità nel gaming Un fulmine sulla scrivania, Corsair Sabre v2 Pro...
Snapdragon X2 Elite Extreme: i benchmark...
Electronic Arts (EA) acquisita per 55 mi...
Dopo 30 anni, un modder aggiorna la prim...
Amazon sorprende: iPhone 16 crolla a 699...
Fundo.one, la prima startup finanziata d...
Telegram al centro delle elezioni in Mol...
Densità energetica triplicata ris...
Nuove regole per l'AI di Meta: niente co...
iPhone 16 in Bianco e altri 2 colori a s...
Microsoft rimuove il blocco dell'aggiorn...
TikTok 'MAGA al 100%': Trump vuole modif...
Stuttering e freeze sui laptop da 3.000 ...
Government Data Intelligence for Agricul...
iPhone 17e limitato per non oscurare iPh...
Windows 11 può usare l'IA per cla...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:17.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v