Red de conocimiento informático - Aprendizaje de código fuente - Proporciona el código original para una herramienta de chat escrita en Java, incluidos componentes del lado del servidor y del lado del cliente.

Proporciona el código original para una herramienta de chat escrita en Java, incluidos componentes del lado del servidor y del lado del cliente.

importar java.applet.*;

importar java.awt.*

importar java.io.*; java.net.*;

import java.awt.event.

clase pública ChatClient extiende Applet{

protected boolean loggedIn //estado de inicio de sesión

marco protegido cp; //marco de la sala de chat

protegido static int PORTNUM=7777; //número de puerto predeterminado 7777

protegido int puerto;

calcetín de socket protegido;

BufferedReader protegido es; // BufferedReader se usa para leer datos del calcetín

PrintWriter protegido pw // PrintWriter se usa para escribir datos en el calcetín

protected TextField tf; // TextField se utiliza para la entrada

protected TextArea ta;

protected String paintMessage; // mensaje publicado

public ChatParameter Chat;

public void init(){

paintMessage="Se está generando ventana de chat"

repaint(); Frame (TITLE);

cp.setLayout(new BorderLayout());

String portNum=getParameter("port"); //este parámetro no es demasiado explícito

public void init() {

paintMessage="Generando ventana de chat"

paintMessage="Generando ventana de chat"

cp= new; Frame(TITLE);

cp.

port=PORTNUM;

if (portNum!=null) //el libro es portNum==null, muy problemático

port=Integer.parseInt(portNum);

//CGI

ta=new TextArea(14, 80); ta.setEditable(false); //propiedades de solo lectura

ta.setFont(new Font("Monoespaciado

", Font.PLAIN, 11));

cp.setEnabled(false);

lob.setEnabled(true);

tf.requestFocus() ; // Ingrese la entrada del teclado en el cuadro de texto de la derecha

})

}.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent) e){

cerrar sesión();

lib.setEnabled(true);

lob.setEnabled(false); .requestFocus();

}

}.

});

p.add(nueva etiqueta ("Mensaje de entrada: "));

tf=new TextField(40);

tf.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(loggedIn){

//pw.println(Chat.CMD_BCAST tf.getText()); ///Chat.CMD....esto ¿Qué es?

int j=tf.getText().indexOf(":");

if(jgt;0) pw.println(Chat.CMD_MESG tf.getText ( ));

else

pw.println(Chat.CMD_BCAST tf.getText(); ///Chat.CMD ¿Qué es?CMD_BCAST tf.getText());

tf.setText(""); // ¿No usas flush()?

}

}

}); /p>

p>

p.add(tf);

cp.add(BorderLayout.SOUTH, p);

cp.addWindowListener(new WindowAdapter( ) {

public void windowClosing(WindowEvent e){

// Si se ejecuta setVisible o dispose, cierra la ventana

ChatClient.this.cp.setVisible (falso);

p>

ChatClient.this.cp.dispose();

cerrar sesión(); );

cp.pack(); // No entiendo cuál es el punto de esto.

// Poner el marco cp en el medio

Dimensión us=cp.getSize(),

them=Toolkit.getDefaultToolkit().get

ScreenSize();

int newX=(ellos. ancho-us.width)/2

int newY=(ellos.

cp.setLocation( newX, newY);

cp.setVisible(true);

paintMessage="La ventana ahora debería estar visible"

repaint(); p>

}

//Inicie sesión en la sala de chat

public void login(){

if(loggedIn) return.

intente {

sock=new Socket(getCodeBase().getHost(), puerto

is=new BufferedReader(new InputStreamReader(sock. getInputStream())

pw=nuevo PrintWriter(sock. getOutputStream());

pw=nuevo PrintWriter(sock. getOutputStream());

pw=nuevo PrintWriter(sock.getOutputStream (), true);

}catch(IOException e){

showStatus("No se puede obtener el socket: " e); p> cp.add (new Label("No se puede obtener el socket: " e));

return;}

//C/Clock.getOutputStream(), verdadero) ;

Regresar.

//Construya e inicie el lector, lea los datos del servidor y envíelos al cuadro de texto

//Aquí, haga crecer el hilo para evitar el bloqueo.

Recurso(bloqueos)

nuevo hilo (nuevo Runnable(){

public void run(){

Línea de cadena;

probar {

while(loggedIn amp;amp;(( line=is.readLine())! =null)))

ta.appendText(line "\n"); /p>

}catch(IOException e){

showStatus("¡¡Dios mío, también corté la línea !!!!"); .CMD_LOGIN "AppletUser");

loggedIn =true;

}

// Código para imitar el cierre de sesión

cierre de sesión público vacío ( ){

if(! loggedIn)

return

loggedIn=false

intentar{

if(sock!=null)

sock.close();

}catch(IOException ign){