Socket in Java con Gui

  • Creatore Discussione Creatore Discussione Tethys
  • Data di inizio Data di inizio

Tethys

Nuovo Utente
26 Gen 2018
3
0
1
40
Buonasera,
mi sto imbattendo nello sviluppo di una semplice chat (uno a uno) in java. Mi serve perchè devo sviluppare un progetto universitario. Ho scritto tutto il codice, ma le due interfacce (che hanno una textarea, una textfield ed un button) non si parlano:(. Se qualcuno riuscisse a darmi qualche suggerimento ne sarei grata. Copio il codice qui sotto.
Codice:
Classe per il server:
import java.awt.EventQueue;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.Font;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class chat_server {
    public JFrame frmServer;
    public  static JTextField msg_text = new JTextField();;
    public static  JTextArea msg_area = new JTextArea();
    public  static JButton msg_send = new JButton("Send");
    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    chat_server window = new chat_server();
                    window.frmServer.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        String msgin="";
        try {
            ss = new ServerSocket(6789); //diamo la porta del server
            s= ss.accept();//mi metto in ascolto sulla porta che ho aperto
            ss.close();//per fare una connessione uno a uno
            din= new DataInputStream(s.getInputStream());
            dout=new DataOutputStream(s.getOutputStream());
          
            while(!msgin.equals("exit")) {
                msgin=din.readUTF();
                msg_area.append("\n"+msgin);;// visualizziamo il messaggio dal client
            }
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
 
    static ServerSocket ss;
    static Socket s;
    static DataInputStream din;
    static DataOutputStream dout;
 
    /**
    * Create the application.
    */
    public chat_server() {
        initialize();
    }
    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
        frmServer = new JFrame();
        frmServer.setTitle("Server");
        frmServer.setBounds(100, 100, 450, 300);
        frmServer.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmServer.getContentPane().setLayout(null);
      
        JTextArea msg_area = new JTextArea();
        msg_area.setBounds(12, 12, 400, 150);
        frmServer.getContentPane().add(msg_area);
      
        msg_text = new JTextField();
        msg_text.setBounds(12, 188, 290, 35);
        frmServer.getContentPane().add(msg_text);
        msg_text.setColumns(10);
      
        JButton msg_send = new JButton("Send");
        msg_send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                String msgout="";
                try {
                  
                    msgout=msg_text.getText().trim();
                    dout.writeUTF("Server: "+msgout);//mandiamo il messaggio del server al client
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        });
        msg_send.setFont(new Font("Arial", Font.BOLD, 14));
        msg_send.setBounds(325, 188, 95, 35);
        frmServer.getContentPane().add(msg_send);
    }
}

Classe per il Client:
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JButton;
import javax.swing.JTextField;
import java.awt.Font;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class chat_client {
    public JFrame frmClient;
    public  static JTextField msg_text = new JTextField();;
    public static  JTextArea msg_area = new JTextArea();
    public  static JButton msg_send = new JButton("Send");
    /**
    * Launch the application.
    */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    chat_client window = new chat_client();
                    window.frmClient.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
        String msgin="";
        try {
            s=new Socket(InetAddress.getLocalHost(),6789);// indirizzo ip locale perche lanciamo client e server dalla stessa macchina
            din=new DataInputStream(s.getInputStream());
            dout=new DataOutputStream(s.getOutputStream());
          
            while (!msgin.equals("exit")) {
                msgin=din.readUTF();
                msg_area.append("\n"+msgin);;
            }
          
          
        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    static Socket s;
    static DataInputStream din;
    static DataOutputStream dout;
    /**
    * Create the application.
    */
    public chat_client() {
        initialize();
    }
    /**
    * Initialize the contents of the frame.
    */
    private void initialize() {
        frmClient = new JFrame();
        frmClient.setTitle("Client");
        frmClient.setBounds(100, 100, 450, 300);
        frmClient.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frmClient.getContentPane().setLayout(null);
      
      
        msg_area.setBounds(12, 12, 400, 150);
        frmClient.getContentPane().add(msg_area);
      
      
        msg_send.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String msgout="";
                try {
                  
                    msgout=msg_text.getText().trim();
                    dout.writeUTF("Client: "+msgout);//mandiamo il messaggio del server al client
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
            }
        });
        msg_send.setFont(new Font("Arial", Font.BOLD, 14));
        msg_send.setBounds(325, 188, 95, 35);
        frmClient.getContentPane().add(msg_send);
      
      
        msg_text.setBounds(12, 188, 290, 35);
        frmClient.getContentPane().add(msg_text);
        msg_text.setColumns(10);
    }
}
Spero nei vostri suggerimenti.
Vi ringrazio anticipatamente. Buon Pomeriggio a tutti ;)
 
Ultima modifica di un moderatore:
@Tethys
Da regolamento del forum, come tutti noi sei tenuta ad usare il tag
code.gif
quando posti del codice, oppure la funzione codice dalla barra degli strumenti
box inserisci 2.png.JPG

Inoltre ti prego di leggere attentamente il regolamento generale del forum e quello di sezione dove posti
Grazie
Per questa volta te lo sistemo io ma mi raccomando per il futuro
 
Ciao Max, scusami questa cosa mi era sfuggita...ti ringrazio per la correzione...ho sbagliato anche la sezione?:(..
 

Discussioni simili