Salve, giusto qualche giorno fa ho ultimato il mio server e il mio client che, connessi tra loro attraverso i sockets, si scambiano messaggi. Quelle applicazioni, tuttavia, non erano applicazioni grafiche(console) e quindi ho deciso adesso di dargli una grafica. Desso ho un problema per quanto riguarda il server. Metto le tappe che ho fatto:
1) costruisco un JButton che, una volta cliccato, fa avviare un thread che crea il server alla porta 6000 e attende che un client vi acceda.
Inoltre creo (lo dico a parole mie, scusate i miei termini scarni) un oggetto della classe OutputStream con parametro Il Client. Adesso faccio vedere il pezzo di codice
Fin qui non c'è problemacodice:OutputStream out = client.getOutputStream();
2) costruisco una JFieldText e un JButton. Alla pressione di questo bottone, il programma manda in esecuzione un altro Thread. Creo una String mess alla quale do il valore della textField attraverso un costruttore e poi creo un oggetto di PrintStream con parametro out (che si trova in un'altra classe) facendo così
ora, sapendo che il messaggio contenuto nella JFieldText arriva effettivamente alla variabile mess (ho provato a mettere un System.out.printl(mess)), perchè il compilatore mi indica come sbagliata p = new PrintStream(prov.out); ????codice:prova2 prov = new prova2(); // prova2 è la classe che contiene out p = new PrintStream(prov.out); p.println(mes); //mes = la variabile che contiene il contenuto della JFieldText
se volete vi posto tutti i codici
ecco il thread che contiene la connessione e la dichiarazione di OutputStream out. Il suo nome è prova2
e qui c'è il thread riguardante la scrittura del messaggio (PrintStream), il nome ddella classe è provacodice:package serververo; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import javax.swing.JOptionPane; public class prova2 implements Runnable{ ServerSocket server; Socket client; OutputStream out; @Override public void run() { try { server = new ServerSocket(6000); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } client = new Socket(); JOptionPane.showMessageDialog(null, "connessione effettuata con successo, attesa del client..."); try { client = server.accept(); out = client.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } JOptionPane.showMessageDialog(null, "un client si è collegato"); } }
infine ecco il codice della finestra graficacodice:package serververo; import java.io.IOException; import java.io.OutputStream; import java.io.PrintStream; public class prova implements Runnable { String mes; PrintStream p; public prova(String mess) throws IOException { this.mes = mess; } @Override public void run() { prova2 prov = new prova2(); System.out.println(mes); p = new PrintStream(prov.out); p.println(mes); } }
codice:package serververo; import java.awt.BorderLayout; public class server extends JFrame { OutputStream output; InputStream input; BufferedReader leggi; PrintStream scrivi; private JPanel contentPane; private JTextField textField; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { server frame = new server(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public server() { setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 547, 408); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); final JButton btnConnetti = new JButton("connetti"); btnConnetti.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { prova2 connessione = new prova2(); Thread connect = new Thread(connessione); connect.start(); } }); textField = new JTextField(); textField.setColumns(10); JButton btnInviaMessaggio = new JButton("INVIA MESSAGGIO"); btnInviaMessaggio.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { try { String messaggio = textField.getText(); prova Prova = new prova(messaggio); Thread proviamo = new Thread(Prova); proviamo.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); JTextArea textArea = new JTextArea(); GroupLayout gl_contentPane = new GroupLayout(contentPane); gl_contentPane.setHorizontalGroup( gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup() .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup() .addGap(25) .addComponent(btnConnetti)) .addGroup(gl_contentPane.createSequentialGroup() .addContainerGap() .addComponent(textField, GroupLayout.DEFAULT_SIZE, 501, Short.MAX_VALUE)) .addGroup(gl_contentPane.createSequentialGroup() .addGap(210) .addComponent(btnInviaMessaggio))) .addContainerGap()) .addComponent(textArea, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, 531, Short.MAX_VALUE) ); gl_contentPane.setVerticalGroup( gl_contentPane.createParallelGroup(Alignment.LEADING) .addGroup(gl_contentPane.createSequentialGroup() .addContainerGap() .addComponent(btnConnetti) .addPreferredGap(ComponentPlacement.RELATED) .addComponent(textArea, GroupLayout.PREFERRED_SIZE, 238, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED, 7, Short.MAX_VALUE) .addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addGap(18) .addComponent(btnInviaMessaggio) .addGap(13)) ); contentPane.setLayout(gl_contentPane); } }

Rispondi quotando


