Establecimiento de la comunicación bidireccional entre el servidor y el cliente en Java

Es posible enviar datos desde el servidor y recibir una respuesta del cliente. De manera similar, el cliente también puede enviar y recibir datos hacia y desde.

A continuación se detallan los distintos pasos para hacerlo:

  • Necesitamos flujos adicionales tanto en el servidor como en el cliente. Por ejemplo, para recibir datos en el servidor, es una mejor idea usar un objeto BufferedReader , como se muestra en el siguiente fragmento de código:
    InputStream obj = s.getInputStream();
    BufferedReader br = new BufferedReader(new InputStreamReader(obj);
    
  • Entonces se pueden usar los métodos read() o readLine() del objeto BufferedReader para leer datos. Para enviar datos desde el cliente podemos tomar la ayuda de la clase DataOutputStream como se muestra en el siguiente fragmento de código:
    OutputStream obj + s.getOutputStrean();
    DataOutputStream dos = new DataOutputStream(obj);
    
  • Luego, el método writeBytes() de la clase DataOutputStream se puede usar para enviar strings en forma de un grupo de bytes. Para establecer la comunicación bidireccional entre un cliente y un servidor, realice los siguientes pasos:
    • Creando el Programa del Servidor : Vamos a crear una clase llamada Server2.java para crear un servidor tal que el servidor reciba datos del cliente usando un objeto BufferedReader y luego envíe una respuesta al cliente usando un objeto PrintStream.

      Servidor2.java

      // Server2 class that
      // receives data and sends data
        
      import java.io.*;
      import java.net.*;
        
      class Server2 {
        
          public static void main(String args[])
              throws Exception
          {
        
              // Create server Socket
              ServerSocket ss = new ServerSocket(888);
        
              // connect it to client socket
              Socket s = ss.accept();
              System.out.println("Connection established");
        
              // to send data to the client
              PrintStream ps
                  = new PrintStream(s.getOutputStream());
        
              // to read data coming from the client
              BufferedReader br
                  = new BufferedReader(
                      new InputStreamReader(
                          s.getInputStream()));
        
              // to read data from the keyboard
              BufferedReader kb
                  = new BufferedReader(
                      new InputStreamReader(System.in));
        
              // server executes continuously
              while (true) {
        
                  String str, str1;
        
                  // repeat as long as the client
                  // does not send a null string
        
                  // read from client
                  while ((str = br.readLine()) != null) {
                      System.out.println(str);
                      str1 = kb.readLine();
        
                      // send to client
                      ps.println(str1);
                  }
        
                  // close connection
                  ps.close();
                  br.close();
                  kb.close();
                  ss.close();
                  s.close();
        
                  // terminate application
                  System.exit(0);
        
              } // end of while
          }
      }

      Comando para compilar el archivo Server2.Java :

      D:\Conversation Program>javac Sever2.java
      
    • Creación del programa cliente : vamos a crear un cliente, llamado Client2.Java , que primero se conecta a un servidor y luego inicia la comunicación enviando una string al servidor. El servidor envía una respuesta al cliente. Cuando se escribe ‘exit’ en el lado del cliente, el programa termina.

      Cliente2.java

      // Client2 class that
      // sends data and receives also
        
      import java.io.*;
      import java.net.*;
        
      class Client2 {
        
          public static void main(String args[])
              throws Exception
          {
        
              // Create client socket
              Socket s = new Socket("localhost", 888);
        
              // to send data to the server
              DataOutputStream dos
                  = new DataOutputStream(
                      s.getOutputStream());
        
              // to read data coming from the server
              BufferedReader br
                  = new BufferedReader(
                      new InputStreamReader(
                          s.getInputStream()));
        
              // to read data from the keyboard
              BufferedReader kb
                  = new BufferedReader(
                      new InputStreamReader(System.in));
              String str, str1;
        
              // repeat as long as exit
              // is not typed at client
              while (!(str = kb.readLine()).equals("exit")) {
        
                  // send to the server
                  dos.writeBytes(str + "\n");
        
                  // receive from the server
                  str1 = br.readLine();
        
                  System.out.println(str1);
              }
        
              // close connection.
              dos.close();
              br.close();
              kb.close();
              s.close();
          }
      }

      Comando para compilar el archivo Client2.java:

      D:\Conversation Program>javac Client2.java
      
    • Salida:
      para ejecutar las clases Server2 y Client2 , ejecute Server2.java y Client2.java en dos ventanas del símbolo del sistema separadas. La figura 1 muestra el resultado de las clases Server2 y Client2:

      Mostrando la salida de las clases Server2 y Client2

Publicación traducida automáticamente

Artículo escrito por aashrut123 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *