2 subprograma de chat Java
importar java.awt.*;
importar javax.swing.*
importar java.awt.event.*; >importar java.net.*;
importar java.io.>clase MyChatter extiende JFrame {
JLabel privado jLName = new JLabel();
privado JTextField jTName = nuevo JTextField();
JLabel privado jLSendMss = nuevo JLabel();
JLabel privado jLReceiveMss = nuevo JLabel(); = nuevo JButton();
JButton privado jBClear = nuevo JButton();
JScrollPane privado jScrollPane1 = nuevo JScrollPane()
JTextPane privado jTSendMss = nuevo JTextPane();
JScrollPane privado jScrollPane2 = nuevo JScrollPane();
JTextPane privado jTReceiveMss = nuevo JTextPane(); //Adaptador de ventana
private MyWindowAdapter mwa=null;
//Variables miembro de comunicación
byte privado[] recibirBuf=nuevo byte[1000]
p>p>
byte privado[] sendBuf=null;
DatagramSocket privado datagramServer=null;
DatagramSocket privado datagramClient=null
DatagramPacket privado recibirPacket; =null;
p>
paquete de datos privado sendPacket=null;
PORT final estático privado=5000
dirección Inet privada inetAddr=null; /p>
servidor privado = nulo;
cadena privada machineName=null;
cadena privada sendMss=null
clase El servidor extiende el hilo{
servidor público( ){
start();
}
ejecución vacía pública(){
while(true){
intentar{
// System.out.println(datatdat)out.println(datagramServer
datagramServer.receive(receivePacket);
displayMss();
}
catch(Excepción e){
e.printStackTrace(); >
}
}
}
}
clase MyWindowAdapter extiende WindowAdapter{
public void ventanaClosing(WindowEvent e) {
cerrar();
System.exit(0); >
clase MyKeyAdapter extiende KeyAdapter{
public void keyPressed(KeyEvent e){
/System.out.println(e.getKeyCode());
if(e.isShiftDown()&e.getKeyCode()==10) {
sendReady();
}
} p>
}
private void sendReady(){
if(!checkMachineName()){
return;
}
if(!checkSendMss()){
Devolver
}
if(sendMss()){
JOptionPane.showMessageDialog(null, "¡Enviar mensaje correctamente!", "Pista", JOptionPane.ERROR_MESSAGE
}
else{
); JOptionPane.showMessageDialog(null, "¡Enviar mensaje correctamente!", "Pista", JOptionPane.ERROR_MESSAGE);
}
else{
JOptionPane. null, "¡Enviar mensaje correctamente! showMessageDialog(null, "¡Error en enviar mensaje!", "Hint", JOptionPane.ERROR_MESSAGE);
}
}
}
sendMss booleano privado(){
prueba{
sendPacket=toDatagram(sendMss, inetAddr, PORT);
datagramClient. enviar(enviarPaquete);
}
p>
catch(Excepción e){
devuelve falso
}
devuelve verdadero; >
paquete de datos privado a Datagram (String s, InetAddress destIA, int destPort){
//sendBuf=new byte[s.
//s.getBytes(0, s .length(), sendBuf, 0);
prueba{
sendBuf=s.getBytes("GB2312"); p> catch(Exception e){
}
devuelve nuevo DatagramPacket(sendBuf, sendBuf.length, destIA, destPort);
checkMachineName() booleano privado{
nombreMáquina=jTName.getText();
if(nombreMáquina.length()==0){
JOptionPane.showMessageDialog(null, "¡Ingrese un nombre de máquina!", "Advertencia", JOptionPane.ERROR_MESSAGE);
devuelve falso
}
prueba; {
inetAddr=InetAddress.getByName(nombredemáquina
}
catch(nombredemáquina.length() ==0); > if(machineName.length() ==0); {
JOptionPane.
catch(UnknownHostException e){
JOptionPane.showMessageDialog(null, " ¡El nombre de la máquina no reconocido o la máquina no existe!", "Advertencia", JOptionPane.showMessageDialog(null, "¡El nombre de la máquina no reconocido o la máquina no existe!"), "Advertencia", JOptionPane.ERROR_MESSAGE);
Devuelve falso;
}
Devuelve verdadero
}
checkSendMss privado booleano(){
sendMss =jTSendMss.getText();
If (sendMss.length()==0){
JOptionPane.showMessageDialog(null, "¡El mensaje a enviar no puede estar vacío!" ", "Advertencia", JOptionPane.ERROR_MESSAGE);
Devuelve falso
;
}
Devuelve verdadero;
}
displayMss privado vacío(){
Cadena mss= null;
String tmp=jTReceiveMss.setText(tmp mss "\n");
}
}
cierre vacío privado (){
}
private void init() lanza IOException{
mwa=new MyWindowAdapter();
datagramServer=new DatagramSocket(PORT);
datagramClient=nuevo DatagramSocket();
recibirPaquete=nuevo DatagramPacket(receiveBuf, recibirBuf.addKeyListener(nuevo MyKeyAdapter());
server=new Server();
}
public MyChatter() lanza HeadlessException {
prueba {
jbInit();
init();
}
catch(Excepción e) {
e.printStackTrace(); > }
}
public static void main (String[] args) lanza HeadlessException {
MyChatter myChatter1 = new MyChatter(); p> myChatter1.addWindowListener(myChatter1.mwa);
myChatter1.setSize(400, 410);
myChatter1.setVisible(true);
}
private void jbInit() lanza una excepción {
jLName.setText("Nombre de la máquina o dirección IP:");
jLName.setBounds(new rectángulo(15 , 7, 108, 18));
this.getContentPane().setLayout(null);
jTName.setBounds(new rectángulo(13, 27, 368, 22)) ;
jLSendMss.setText("Enviando mensaje: ");
jLSendMss.setBounds(new Rectángulo(12, 54, 92, 20));
jLSendMss.setBounds(new Rectángulo(12, 54, 92, 20));
this.20));
jLReceiveMss.se
tText("Recibir mensaje:");
jLReceiveMss.setBounds(nuevo Rectángulo(12, 208, 86, 19));
jBSend.setBounds(nuevo Rectángulo(97, 178 ) , 68, 19));
jBSend.setText("Enviar");
jLSendMss.setBounds(new Rectángulo(12, 54, 92, 20)); p >
this.setText("Enviar");
jBSend.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
jBSend_actionPerformed(e);
}
});
jBClear.setText("Clear")setBounds(nuevo rectángulo) (224, 179, 68, 19));
this.setResizable(false);
this.setTitle("Programa de chat de Zhang Hui"
);jScrollPane1.setBounds(nuevo Rectángulo(13, 77, 368, 90));
jScrollPane2.setBounds(nuevo Rectángulo(13, 228, 368, 145));
jTReceiveMss. setEdditable(false);
this.getContentPane().add(jLName, null);
this.getContentPane().add(jTName, null); p>
this.getContentPane().add(jLSendMss, null);
this.getContentPane().add(jLReceiveMss, null);
this.getContentPane(). .add( jBSend, null);
this.getContentPane().add(jBClear, null);
this.getContentPane().add(jScrollPane1, null); p>
this.getContentPane().add(jScrollPane2, null);
jScrollPane2.getViewport().add(jTReceiveMss, null);
jScrollPane1.getViewport() .add( jTSendMss, null);
}
void jBClear_actionPerformed(ActionEvent e) {
jTSendMss.setText(" "
<); p> }v
oid jBSend_actionPerformed(ActionEvent e) {
sendReady();
}
}
Absolutamente válido, ¡de acuerdo!