-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathClienteChat.java
193 lines (189 loc) · 6.62 KB
/
ClienteChat.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
/*
* CLIENTE DE CHAT
* A continuación vamos a crear el cliente de Chat (Figura 3).
* Como vemos, en el caso del cliente la pantalla es mucho mas simple:
* sólo tendremos dos JTextField, el primero para ingresar la IP
* donde se encuentra el servidor de chat, y el segundo para el
* número de puerto; en el medio de la ventana un cuadro de texto donde
* el usuario verá lo que escriben los otros participantes; y finalmente,
* un tercer JTextField donde ingresará sus mensajes.
* El código del cliente será:
*/
//package chat; //comentado para evitar error en tiempo de ejecución
//paquete y clase no encontrados
import java.io.*;
import java.net.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import com.borland.jbcl.layout.*;
public class ClienteChat extends Frame implements Runnable
{
/* Creamos buffers de entrada y salida */
protected DataInputStream i = null;
protected DataOutputStream o = null;
/* y un hilo para escuchar */
protected Thread listener = null;
JPanel PanelCliente = new JPanel();
BorderLayout borderLayout1 = new BorderLayout();
JPanel PanelDatosConexion = new JPanel();
JTextField TxMensaje = new JTextField();
BoxLayout2 boxLayout21 = new BoxLayout2();
JLabel LbPuerto = new JLabel();
JLabel LbIP = new JLabel();
JTextField TxIP = new JTextField();
JTextField TxPuerto = new JTextField();
JButton BtnConecar = new JButton();
BorderLayout borderLayout2 = new BorderLayout();
JButton BtnSalir = new JButton();
JScrollPane ScrollPane = new JScrollPane();
JTextArea JTxTexto = new JTextArea();
/* Constructor por defecto */
public ClienteChat()
{
try
{
jbInit();
}
catch(Exception e)
{
e.printStackTrace();
}
}
/* Sobrecarga el método run */
public void run()
{
try
{
while(true)
{
/* Leemos los mensajes y los agregamos al cuadro de texto */
String line = i.readUTF();
JTxTexto.append(line + "\n");
}
}
/* Capturamos los errores correspondientes */
catch(NullPointerException ex)
{
JTxTexto.append("Aguarde un instante mientras se establece la conexión...\n");
}
catch(SocketException ex)
{
JTxTexto.append("No está conectado a ningún servidor...\n");
}
catch(IOException ex)
{
JTxTexto.append("Error de entrada/salida : "+ ex.getMessage() + "\n");
}
finally
{
/* Si los errores son insalvables intentaremos cerrar todo */
listener = null;
validate();
try
{
o.close();
}
catch(IOException ex)
{
JTxTexto.append("Error : " + ex.getMessage() + "\n");
}
}
}
/* Código que arma la ventana jbInit */
private void jbInit() throws Exception
{
super.setTitle("Cliente de Chat");
super.setLayout( new BorderLayout() );
this.setLayout(borderLayout2);
this.setVisible(true);
PanelCliente.setMinimumSize( new Dimension(350, 150));
PanelCliente.setPreferredSize( new Dimension(450, 150));
BtnConecar.addActionListener( new java.awt.event.ActionListener()
{ public void actionPerformed(ActionEvent e)
{ BtnConecar_actionPerformed(e);}});
TxMensaje.addActionListener( new java.awt.event.ActionListener()
{ public void actionPerformed( ActionEvent e)
{ TxMensaje_actionPerformed(e);}});
BtnSalir.setMnemonic('S');
BtnSalir.setText("Salir");
BtnSalir.addActionListener( new java.awt.event.ActionListener()
{ public void actionPerformed(ActionEvent e)
{ BtnSalir_actionPerformed(e);}});
PanelDatosConexion.setMinimumSize( new Dimension(350, 27));
JTxTexto.setEditable(false);
ScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
this.add(PanelCliente, BorderLayout.CENTER);
this.add(PanelDatosConexion, BorderLayout.NORTH);
PanelCliente.setLayout(borderLayout1);
PanelDatosConexion.setLayout(boxLayout21);
LbIP.setText(" I.P. del Servidor : ");
LbPuerto.setText(" Puerto : ");
PanelCliente.add(TxMensaje, BorderLayout.SOUTH);
PanelCliente.add(ScrollPane, BorderLayout.CENTER);
BtnConecar.setMnemonic('C');
BtnConecar.setText(" Conectar ");
PanelDatosConexion.add(LbIP, null);
PanelDatosConexion.add(TxIP, null);
PanelDatosConexion.add(LbPuerto, null);
PanelDatosConexion.add(TxPuerto, null);
PanelDatosConexion.add(BtnConecar, null);
PanelDatosConexion.add(BtnSalir, null);
ScrollPane.getViewport().add(JTxTexto, null);
super.pack();
super.show();
}
/* La acción del botón será crear una instancia de esta clase como hilo */
void BtnConecar_actionPerformed(ActionEvent e)
{
TxMensaje.requestFocus();
listener = new Thread(this);
listener.start();
try
{
/* Creamos el socket del cliente con la I.P. y el puerto ingresados por pantalla */
Socket s = new Socket(TxIP.getText(), Integer.parseInt(TxPuerto.getText()));
/* Creamos los buffers de entrada y salida */
this.i = new DataInputStream( new BufferedInputStream( s.getInputStream()));
this.o = new DataOutputStream( new BufferedOutputStream( s.getOutputStream()));
}
catch(Exception ex)
{
JTxTexto.append("No está conectado a ningún servidor...\n");
}
}
/* La acción del JTextField será enviar los mensajes a los otros clientes a través del servidor */
void TxMensaje_actionPerformed(ActionEvent e)
{
try
{
o.writeUTF((String)TxMensaje.getText());
o.flush();
}
catch(IOException ex)
{
JTxTexto.append("Error de entrada/salida : " + ex.getMessage() + "\n");
TxMensaje.setText(new String());
}
}
/* Finalmente el método para salir de la aplicación */
void BtnSalir_actionPerformed(ActionEvent e)
{
try
{
this.i.close();
this.o.close();
super.dispose();
System.exit(0);
}
catch(Exception ex)
{
System.exit(0);
}
}
/* Método main */
public static void main(String[] args)
{
ClienteChat clienteDeChat = new ClienteChat();
}
}