¿Cuáles son algunos consejos para crear un programa de mensajería instantánea en Java para el nivel de escuela secundaria del examen CBSE?

Aquí le proporciono el código, por favor, trabaje sobre él para cumplir con los requisitos deseados:

importar java.io.BufferedReader;
import java.io.IOException;
importar java.io.InputStreamReader;

clase pública SimpleChat {

booleano estático privado isRunning = true;
Remitente estático privado del remitente;
Receptor receptor estático privado;

public static void main (String [] args) lanza IOException {

si (args.length <3) {
showUsage ();
}

tratar {
receptor = nuevo Receptor (Integer.parseInt (args [1]));
remitente = nuevo Remitente (args [0], args [2], Integer.parseInt (args [3]));
} catch (InterruptedException e) {
showUsage ();
}

// Leer la entrada del usuario
BufferedReader br = new BufferedReader (new InputStreamReader (System.in));
System.out.println (“Chat iniciado. Escribe ‘\\ exit’ para salir.”);

while (isRunning) {
Entrada de cadena = br.readLine ();

if (input.equals (“\\ exit”)) {
receiver.stop ();
sender.stop ();
isRunning = false;
} else {
sender.sendMessage (entrada);
}
}
}

showUsage vacío estático () {
System.out.println (“Uso: java SimpleChat.java listening_port target_IP target_port”);
System.exit (1);
}

}

Receiver.java

importar java.io.BufferedReader;
import java.io.IOException;
importar java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

receptor público de clase {

privado booleano isRunning = true;

receptor público (int listeningPort) lanza IOException {

Receptor ejecutable T = nuevo Ejecutable () {
public void run () {

ServerSocket serverSocket;
tratar {
serverSocket = nuevo ServerSocket (listeningPort);
Socket clientSocket = serverSocket.accept ();
BufferedReader in = new BufferedReader (new InputStreamReader (clientSocket.getInputStream ()));

while (isRunning) {
tratar {
System.out.println (in.readLine ());
} captura (IOException e) {
// TODO Bloque catch generado automáticamente
e.printStackTrace ();
}
}
} catch (IOException e1) {
// TODO Bloque catch generado automáticamente
e1.printStackTrace ();
}

}
};

nuevo Thread (receiverT) .start ();
}

parada del vacío público () {
isRunning = false;
}

}

Sender.java

import java.io.IOException;
importar java.io.PrintWriter;
import java.net.Socket;
importar java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

clase pública Sender {

privado booleano isRunning = true;
Lista privada volátil msgs;

public Sender (String username, String targetIP, int targetPort) lanza InterruptedException, UnknownHostException, IOException {
msgs = Collections.synchronizedList (new ArrayList ());

Runnable senderT = new Runnable () {
public void run () {
tratar {
Socket socket = nuevo Socket (targetIP, targetPort);
PrintWriter out = new PrintWriter (socket.getOutputStream (), true);

while (isRunning) {
sincronizado (msgs) {
Iterador it = msgs.iterator ();

while (it.hasNext ()) {
out.println (username + “:” + it.next ());
}

// Borrar mensajes para enviar
msgs.clear ();
}
}