Cómo utilizar JAVA para crear un software de chat
/**
*Programa de chat basado en protocolo UDP
*
* 2007.9.18
* */
//Importar paquete
importar java.awt.*;
importar java.awt.event.*;
importar java.awt.event.ActionEvent;
importar java.awt.event.ActionListener;
importar javax.swing.*;
importar java. net.*;
clase pública Chat extiende JFrame implementa ActionListener
{
//Dirección de transmisión o la dirección de la otra parte
pública static final String sendIP = "127.0.0.1";
//Puerto de envío 9527
public static final int sendPort = 8000;
JPanel p = nuevo JPanel ( );
List lst = new List(); //Visualización del mensaje
JTextField txtIP = new JTextField(18); //Complete la dirección IP
JTextField txtMSG = new JTextField(20); //Completa el mensaje a enviar
JLabel lblIP = new JLabel("Dirección IP:");
JLabel lblMSG = new JLabel("Mensaje:" );
JButton btnSend = new JButton("Enviar");
byte [] buf;
//El objeto que define DatagramSocket que debe manejar excepciones
//Socket para enviar y recibir paquetes de datagramas
DatagramSocket ds = null;
//======== ==== ==Constructor======================
Chat público()
{ p>
CreateInterFace();
//Registrar oyente del cuadro de mensaje
txtMSG.addActionListener(this);
btnSend.addActionListener(this);
intente
{
//Puerto:9527
ds =new DatagramSocket(sendPort);
} p>
catch(Excepción ex)
{
ex.printStackTrace();
}
/ /== ==========Aceptar mensaje============
//Clase anónima
nuevo hilo (nuevo ejecutable ()
{
ejecución pública vacía()
{
byte buf[] = new byte[1024];
//Indica aceptar paquetes de datagramas
while(true)
{
intente
{
DatagramPacket dp = nuevo DatagramPacket(buf,1024,InetAddress.getByName(txtIP.getText()),sendPort);
ds.receive(dp);
lst.add("Mensaje de ◆" + dp.getAddress().getHostAddress() + "◆"+"Dijo:" + nueva cadena (buf,0, dp.getLength()) /*+ dp.getPort()*/,0);
}
catch(Exception e)
{< / p>
if(ds.isClosed())
{
e.printStackTrace();
}
}
}
}
}).start();
//Cerrar evento de formulario
this .addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent w)
{
System.out.println( "test");
int n=JOptionPane.showConfirmDialog(null,"¿Quieres salir?","Salir",JOptionPane.YES_NO_OPTION);
if(n= =JOptionPane.YES_OPTION)
{
dispose();
System.exit(0);
ds.close() ;//Cerrar objeto ds//Cerrar socket de datagrama
}
}
});
} p>
//Diseño de interfaz
public void CreateInterFace()
{
this.add(lst,BorderLayout.CENTER);
p >this.add(p,BorderLayout.SOUTH);
p.add(lblIP);
p.add(txtIP);
p.add(lblMSG);
p.add(txtMSG);
p.add(btnSend);
txtIP.setText(sendIP); /p>
//Color de fondo
lst.setBackground(Color.amarillo);
//Estilo predeterminado de JAVA
this.setUndecorated( true );
this.getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
this.setSize(600,500);
this.setTitle("〓Sala de chat〓 ");
this.setResizable(false);//El tamaño del formulario no se puede cambiar
this.setLocationRelativeTo(null);//El formulario está centrado
this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
this.setVisible(true);
txtMSG.requestFocus();//El cuadro de mensaje recibe el foco
}
//================================Función principal==== ==== =======================
public static void main(String[]args)
{ p>
nuevo Chat();
}
//==================== ===== =========Enviar mensaje================================
//Presiona enter en el cuadro de mensaje para enviar el evento de mensaje
public void actionPerformed(ActionEvent e)
{
//Obtener el contenido de texto
buf = txtMSG.getText().getBytes();
//Determina si el cuadro de mensaje está vacío
if (txtMSG.getText( ).length()==0) p>
{
JOptionPane.showMessageDialog(null,"El mensaje enviado no puede estar vacío","Preguntar",JOptionPane.WARNING_MESSAGE);
}
else{
prueba
{
Dirección InetAddress = InetAddress.getByName(sendIP);
DatagramPacket dp = new DatagramPacket(buf ,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);
ds.send(dp);
}
catch( Excepción ex)
{
ex.printStackTrace();
}
}
txtMSG.setText ("");//Borrar el cuadro de mensaje
//Haga clic en el botón enviar para enviar el evento de mensaje
if(e .getSource()==btnSend)
{
buf = txtMSG.getText().getBytes();
prueba
{
DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName(txtIP.getText()),sendPort);
}
catch (Excepción ex)
{
ex.printStackTrace();
}
txtMSG.setText("");// Borrar el cuadro de mensaje
txtMSG.requestFocus();
}
}
}