Requisito previo: datagramas en Java En este artículo, aprenderemos a usar datagramas en Java para crear una aplicación de mensajería asincrónica en Java. Asíncrono en este contexto significa que tanto el servidor como el cliente pueden enviarse mensajes de texto de forma independiente sin esperar ningún tipo de respuesta de la otra parte. Usaremos el concepto de subprocesos múltiples para implementar el envío y la recepción de mensajes de texto entre los procesos con la ayuda de DatagramPackets.. Los datagramas son paquetes de información que se pasan entre aplicaciones. Una vez que el datagrama ha sido enviado a su destino previsto, es independiente y no hay seguridad de que llegará o incluso de que alguna aplicación estará allí para recibirlo. Java implementa datagramas sobre el protocolo UDP (Protocolo de datagramas de usuario) . A continuación se muestra la implementación del enfoque anterior.
UnsyncChatServer.java
import java.net.*;
import java.io.*;
import java.util.*;
public class UnSyncChatServer {
public static void main(String args[])
throws IOException, InterruptedException
{
// Create DatagramSocket and get ip
DatagramSocket ss = new DatagramSocket(1234);
InetAddress ip = InetAddress.getLocalHost();
System.out.println("Running UnSyncChatServer.java");
System.out.println("Server is Up....");
// Create a sender thread
// with a nested runnable class definition
Thread ssend;
ssend = new Thread(new Runnable() {
@Override
public void run()
{
try {
Scanner sc = new Scanner(System.in);
while (true) {
synchronized (this)
{
byte[] sd = new byte[1000];
// scan new message to send
sd = sc.nextLine().getBytes();
DatagramPacket sp
= new DatagramPacket(
sd,
sd.length,
ip,
5334);
// send the new packet
ss.send(sp);
String msg = new String(sd);
System.out.println("Server says: "
+ msg);
// exit condition
if ((msg).equals("bye")) {
System.out.println("Server"
+ " exiting... ");
break;
}
System.out.println("Waiting for"
+ " client response... ");
}
}
}
catch (Exception e) {
System.out.println("Exception occurred");
}
}
});
Thread sreceive;
sreceive = new Thread(new Runnable() {
@Override
public void run()
{
try {
while (true) {
synchronized (this)
{
byte[] rd = new byte[1000];
// Receive new message
DatagramPacket sp1
= new DatagramPacket(
rd,
rd.length);
ss.receive(sp1);
// Convert byte data to string
String msg
= (new String(rd)).trim();
System.out.println("Client ("
+ sp1.getPort()
+ "):"
+ " "
+ msg);
// Exit condition
if (msg.equals("bye")) {
System.out.println("Client"
+ " connection closed.");
break;
}
}
}
}
catch (Exception e) {
System.out.println("Exception occurred");
}
}
});
ssend.start();
sreceive.start();
ssend.join();
sreceive.join();
}
}
UnsyncChatClient.java
import java.io.*;
import java.net.*;
import java.util.Scanner;
public class UnSyncChatClient {
public static void main(String args[])
throws IOException, InterruptedException
{
// create DatagramSocket and get ip
DatagramSocket cs
= new DatagramSocket(5334);
InetAddress ip
= InetAddress.getLocalHost();
System.out.println("Running UnSyncChatClient.java");
System.out.println("Client is Up....");
// create a sender thread with a nested
// runnable class definition
Thread csend;
csend = new Thread(new Runnable() {
@Override
public void run()
{
try {
Scanner sc = new Scanner(System.in);
while (true) {
synchronized (this)
{
byte[] sd = new byte[1000];
// scan new message to send
sd = sc.nextLine().getBytes();
// create datagram packet
// for new message
DatagramPacket sp
= new DatagramPacket(
sd,
sd.length,
ip,
1234);
// send the new packet
cs.send(sp);
String msg = new String(sd);
System.out.println("Client says: "
+ msg);
// exit condition
if (msg.equals("bye")) {
System.out.println("client "
+ "exiting... ");
break;
}
System.out.println("Waiting for "
+ "server response...");
}
}
}
catch (IOException e) {
System.out.println("Exception occurred");
}
}
});
// create a receiver thread with a nested
// runnable class definition
Thread creceive;
creceive = new Thread(new Runnable() {
@Override
public void run()
{
try {
while (true) {
synchronized (this)
{
byte[] rd = new byte[1000];
// receive new message
DatagramPacket sp1
= new DatagramPacket(
rd,
rd.length);
cs.receive(sp1);
// convert byte data to string
String msg = (new String(rd)).trim();
System.out.println("Server: " + msg);
// exit condition
if (msg.equals("bye")) {
System.out.println("Server"
+ " Stopped....");
break;
}
}
}
}
catch (IOException e) {
System.out.println("Exception occurred");
}
}
});
csend.start();
creceive.start();
csend.join();
creceive.join();
}
}
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA