Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java - Redes

El término programación de red se refiere a escribir programas que se ejecutan en varios dispositivos (computadoras), en los que todos los dispositivos están conectados entre sí mediante una red.

El paquete java.net de las API de J2SE contiene una colección de clases e interfaces que brindan detalles de comunicación de bajo nivel, lo que le permite escribir programas que se enfocan en resolver el problema en cuestión.

El paquete java.net proporciona soporte para los dos protocolos de red comunes −

Este capítulo brinda una buena comprensión de los siguientes dos temas −

Programación de enchufes

Los sockets proporcionan el mecanismo de comunicación entre dos computadoras usando TCP. Un programa cliente crea un socket en su extremo de la comunicación e intenta conectar ese socket a un servidor.

Cuando se realiza la conexión, el servidor crea un objeto de socket en su extremo de la comunicación. El cliente y el servidor ahora pueden comunicarse escribiendo y leyendo desde el socket.

La clase java.net.Socket representa un socket y la clase java.net.ServerSocket proporciona un mecanismo para que el programa del servidor escuche a los clientes y establezca conexiones con ellos.

Los siguientes pasos ocurren cuando se establece una conexión TCP entre dos computadoras usando sockets −

Una vez que se establecen las conexiones, la comunicación puede ocurrir mediante flujos de E/S. Cada socket tiene un OutputStream y un InputStream. El OutputStream del cliente está conectado al InputStream del servidor, y el InputStream del cliente está conectado al OutputStream del servidor.

TCP es un protocolo de comunicación bidireccional, por lo que los datos se pueden enviar a través de ambos flujos al mismo tiempo. Las siguientes son clases útiles que proporcionan un conjunto completo de métodos para implementar sockets.

Métodos de la clase ServerSocket

El java.net.ServerSocket La clase es utilizada por las aplicaciones del servidor para obtener un puerto y escuchar las solicitudes de los clientes.

La clase ServerSocket tiene cuatro constructores −

Sr.No. Método y descripción
1

ServerSocket público (puerto int) lanza IOException

Intenta crear un socket de servidor vinculado al puerto especificado. Se produce una excepción si el puerto ya está vinculado por otra aplicación.

2

ServerSocket público (puerto int, backlog int) lanza IOException

Similar al constructor anterior, el parámetro de trabajo pendiente especifica cuántos clientes entrantes almacenar en una cola de espera.

3

ServerSocket público (puerto int, backlog int, dirección InetAddress) lanza IOException

De forma similar al constructor anterior, el parámetro InetAddress especifica la dirección IP local a la que enlazar. InetAddress se usa para servidores que pueden tener varias direcciones IP, lo que permite que el servidor especifique en cuál de sus direcciones IP aceptará las solicitudes de los clientes.

4

ServerSocket() público lanza IOException

Crea un socket de servidor independiente. Cuando utilice este constructor, utilice el método bind() cuando esté listo para vincular el socket del servidor.

Si el constructor ServerSocket no arroja una excepción, significa que su aplicación se ha enlazado con éxito al puerto especificado y está lista para las solicitudes de los clientes.

Los siguientes son algunos de los métodos comunes de la clase ServerSocket −

Sr.No. Método y descripción
1

int público getLocalPort()

Devuelve el puerto en el que escucha el socket del servidor. Este método es útil si pasó 0 como el número de puerto en un constructor y deja que el servidor encuentre un puerto por usted.

2

Acepto de socket público () arroja IOException

Espera a un cliente entrante. Este método se bloquea hasta que un cliente se conecta al servidor en el puerto especificado o hasta que se agota el tiempo de espera del socket, suponiendo que el valor de tiempo de espera se haya establecido mediante el método setSoTimeout(). De lo contrario, este método bloquea indefinidamente.

3

setSoTimeout vacío público (tiempo de espera int)

Establece el valor de tiempo de espera para el tiempo que el socket del servidor espera a un cliente durante la aceptación().

4

enlace de vacío público (host de SocketAddress, acumulación interna)

Vincula el socket al servidor y puerto especificados en el objeto SocketAddress. Utilice este método si ha creado una instancia de ServerSocket utilizando el constructor sin argumentos.

Cuando ServerSocket invoca accept(), el método no regresa hasta que un cliente se conecta. Después de que un cliente se conecta, ServerSocket crea un nuevo Socket en un puerto no especificado y devuelve una referencia a este nuevo Socket. Ahora existe una conexión TCP entre el cliente y el servidor, y puede comenzar la comunicación.

Métodos de clase de socket

El java.net.Socket class representa el socket que tanto el cliente como el servidor usan para comunicarse entre sí. El cliente obtiene un objeto Socket al instanciar uno, mientras que el servidor obtiene un objeto Socket del valor de retorno del método accept().

La clase Socket tiene cinco constructores que un cliente usa para conectarse a un servidor −

Sr.No. Método y descripción
1

Socket público (string host, puerto int) lanza UnknownHostException, IOException.

Este método intenta conectarse al servidor especificado en el puerto especificado. Si este constructor no arroja una excepción, la conexión es exitosa y el cliente se conecta al servidor.

2

Socket público (host InetAddress, puerto int) lanza IOException

Este método es idéntico al constructor anterior, excepto que el host se indica mediante un objeto InetAddress.

3

Socket público(String host, int port, InetAddress localAddress, int localPort) lanza IOException.

Se conecta al host y al puerto especificados, creando un socket en el host local en la dirección y el puerto especificados.

4

Socket público(InetAddress host, int port, InetAddress localAddress, int localPort) lanza IOException.

Este método es idéntico al constructor anterior, excepto que el host se indica mediante un objeto InetAddress en lugar de una cadena.

5

Socket público()

Crea un socket desconectado. Utilice el método connect() para conectar este socket a un servidor.

Cuando el constructor de Socket regresa, no simplemente crea una instancia de un objeto Socket, sino que en realidad intenta conectarse al servidor y al puerto especificados.

Aquí se enumeran algunos métodos de interés en la clase Socket. Tenga en cuenta que tanto el cliente como el servidor tienen un objeto Socket, por lo que estos métodos pueden ser invocados tanto por el cliente como por el servidor.

Sr.No. Método y descripción
1

public void connect(SocketAddress host, int timeout) lanza IOException

Este método conecta el socket al host especificado. Este método solo es necesario cuando crea una instancia del Socket utilizando el constructor sin argumentos.

2

dirección Inet pública getInetAddress()

Este método devuelve la dirección de la otra computadora a la que está conectado este socket.

3

getPort público int()

Devuelve el puerto al que está vinculado el socket en la máquina remota.

4

int público getLocalPort()

Devuelve el puerto al que está vinculado el socket en la máquina local.

5

dirección de socket pública getRemoteSocketAddress()

Devuelve la dirección del socket remoto.

6

InputStream público getInputStream() lanza IOException

Devuelve el flujo de entrada del socket. El flujo de entrada está conectado al flujo de salida del enchufe remoto.

7

OutputStream público getOutputStream() lanza IOException

Devuelve el flujo de salida del socket. El flujo de salida está conectado al flujo de entrada del enchufe remoto.

8

public void close() lanza IOException

Cierra el socket, lo que hace que este objeto Socket ya no pueda volver a conectarse a ningún servidor.

Métodos de la clase InetAddress

Esta clase representa una dirección de Protocolo de Internet (IP). Estos son los siguientes métodos útiles que necesitaría mientras realiza la programación de sockets −

Sr.No. Método y descripción
1

dirección Inet estática getByAddress(byte[] dirección)

Devuelve un objeto InetAddress dada la dirección IP sin procesar.

2

dirección de Inet estática getByAddress(String host, byte[] addr)

Crea una InetAddress basada en el nombre de host y la dirección IP proporcionados.

3

getByName estático InetAddress(String host)

Determina la dirección IP de un host, dado el nombre del host.

4

Cadena getHostAddress()

Devuelve la cadena de dirección IP en presentación textual.

5

Cadena getHostName()

Obtiene el nombre de host para esta dirección IP.

6

dirección de Inet estática dirección de Inet getLocalHost()

Devuelve el host local.

7

Cadena a Cadena()

Convierte esta dirección IP en una cadena.

Ejemplo de cliente de socket

El siguiente GreetingClient es un programa cliente que se conecta a un servidor mediante un socket y envía un saludo y luego espera una respuesta.

Ejemplo

// File Name GreetingClient.java
import java.net.*;
import java.io.*;

public class GreetingClient {

   public static void main(String [] args) {
      String serverName = args[0];
      int port = Integer.parseInt(args[1]);
      try {
         System.out.println("Connecting to " + serverName + " on port " + port);
         Socket client = new Socket(serverName, port);
         
         System.out.println("Just connected to " + client.getRemoteSocketAddress());
         OutputStream outToServer = client.getOutputStream();
         DataOutputStream out = new DataOutputStream(outToServer);
         
         out.writeUTF("Hello from " + client.getLocalSocketAddress());
         InputStream inFromServer = client.getInputStream();
         DataInputStream in = new DataInputStream(inFromServer);
         
         System.out.println("Server says " + in.readUTF());
         client.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Ejemplo de servidor de socket

El siguiente programa GreetingServer es un ejemplo de una aplicación de servidor que usa la clase Socket para escuchar clientes en un número de puerto especificado por un argumento de línea de comando:

Ejemplo

// File Name GreetingServer.java
import java.net.*;
import java.io.*;

public class GreetingServer extends Thread {
   private ServerSocket serverSocket;
   
   public GreetingServer(int port) throws IOException {
      serverSocket = new ServerSocket(port);
      serverSocket.setSoTimeout(10000);
   }

   public void run() {
      while(true) {
         try {
            System.out.println("Waiting for client on port " + 
               serverSocket.getLocalPort() + "...");
            Socket server = serverSocket.accept();
            
            System.out.println("Just connected to " + server.getRemoteSocketAddress());
            DataInputStream in = new DataInputStream(server.getInputStream());
            
            System.out.println(in.readUTF());
            DataOutputStream out = new DataOutputStream(server.getOutputStream());
            out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
               + "\nGoodbye!");
            server.close();
            
         } catch (SocketTimeoutException s) {
            System.out.println("Socket timed out!");
            break;
         } catch (IOException e) {
            e.printStackTrace();
            break;
         }
      }
   }
   
   public static void main(String [] args) {
      int port = Integer.parseInt(args[0]);
      try {
         Thread t = new GreetingServer(port);
         t.start();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

Compile el cliente y el servidor y luego inicie el servidor de la siguiente manera −

$ java GreetingServer 6066
Waiting for client on port 6066...

Verifique el programa cliente de la siguiente manera −

Salida

$ java GreetingClient localhost 6066
Connecting to localhost on port 6066
Just connected to localhost/127.0.0.1:6066
Server says Thank you for connecting to /127.0.0.1:6066
Goodbye!

Java

  1. Operadores Java
  2. Comentarios Java
  3. Java para cada bucle
  4. Cadenas Java
  5. Interfaz Java
  6. Clase anónima de Java
  7. Prueba de Java con recursos
  8. Anotaciones Java
  9. Aserciones de Java
  10. Java Vector
  11. Java - Redes