[Aprende JAVA desde cero | Artículo 42] Programación en red para principiantes

Tabla de contenido

Prefacio:

Qué es la programación web:

Escenarios de aplicación de la programación de redes:

Arquitectura de software común: 

Arquitectura CS:

arquitectura BS:

Tres elementos de la programación de red:​

Resumir:


Prefacio:

        Internet de hoy ha penetrado en todos los aspectos de nuestra vida diaria, y la programación de red, como una de las tecnologías importantes, está jugando un papel clave. Como lenguaje de programación ampliamente utilizado, Java también tiene un rendimiento excelente y un gran soporte en el campo de la programación de redes.

        La programación de red de Java proporciona a los desarrolladores potentes herramientas y bibliotecas que les permiten crear fácilmente una variedad de aplicaciones de red, incluidas aplicaciones del lado del cliente y del lado del servidor. A través de las capacidades de programación de red de Java, podemos realizar comunicaciones de red multiplataforma, transmisión de datos, llamadas remotas y entrega de mensajes en tiempo real y otras funciones.

         Emprendamos este emocionante viaje de diseño de procesos de red y exploremos el encanto y el potencial infinito de la tecnología Java. Ya sea que desee agregar nuevas habilidades al desarrollo diario o allanar el camino para el futuro desarrollo profesional, este artículo será su mejor guía para aprender y dominar la programación de redes Java. ¡Empecemos!

Qué es la programación web:

En Java, la programación de redes se refiere al proceso de desarrollo mediante el uso del lenguaje Java y las API relacionadas para realizar varias aplicaciones de red . Abarca aspectos como el establecimiento de conexiones de red, la transferencia de datos y los protocolos de comunicación. 

La programación de red es la transmisión de datos realizada por programas que se ejecutan en diferentes computadoras bajo el protocolo de comunicación de red. 

Escenarios de aplicación de la programación de redes:

  1. Comunicación cliente-servidor : la programación de red se usa a menudo para crear aplicaciones en un modelo cliente-servidor. Los clientes se comunican con los servidores a través de conexiones de red y envían solicitudes para obtener datos o realizar acciones. Por ejemplo, una aplicación web se comunica con un servidor a través del protocolo HTTP para obtener el contenido de una página web o enviar datos de un formulario.

  2. Sistemas distribuidos : la programación en red se utiliza para construir sistemas distribuidos donde varias computadoras se comunican y coordinan el trabajo entre sí a través de una conexión de red. Los sistemas distribuidos se pueden usar en una variedad de aplicaciones, incluido el procesamiento de datos a gran escala, la computación paralela, la administración de clústeres y más.

  3. Comunicación en tiempo real : la programación de red hace posible la comunicación en tiempo real y puede crear aplicaciones de mensajería instantánea, software de videoconferencia, juegos en tiempo real, etc. Los datos y mensajes se transmiten a través de la red, y diferentes usuarios pueden comunicarse e interactuar en tiempo real.

  4. Llamada remota : la programación en red permite llamar a métodos o funciones remotas en diferentes computadoras para lograr la computación distribuida. La llamada a procedimiento remoto (RPC) y el servicio web son tecnologías comunes de llamadas remotas, que se utilizan para implementar llamadas a métodos entre plataformas y entre idiomas.

  5. Transmisión y uso compartido de datos : a través de la programación en red, se puede realizar la transmisión y el uso compartido de datos entre diferentes computadoras. Esto es muy común en escenarios como el procesamiento de datos a gran escala, la transferencia de archivos y el almacenamiento en la nube.

  6. Seguridad y cifrado de redes : la programación de redes también está estrechamente relacionada con la seguridad de redes y el cifrado de datos. A través de la programación de la red, se pueden realizar operaciones como la transmisión segura de datos, la verificación de identidad, el cifrado y descifrado de datos para garantizar la seguridad y confidencialidad de los datos durante la comunicación.

  7. Internet de las cosas (IoT) : la programación en red también juega un papel importante en el campo de IoT. A través de la programación de redes, se puede realizar la comunicación y el intercambio de datos entre dispositivos IoT, a fin de crear aplicaciones como hogares inteligentes, ciudades inteligentes y automatización industrial.

 Antes de aprender formalmente la programación de redes, primero debemos presentar dos arquitecturas de software comunes: CS y BS

Arquitectura de software común: 

Arquitectura CS:

La arquitectura CS , es decir, la arquitectura Cliente-Servidor, es una arquitectura informática distribuida de uso común, que es común en las redes informáticas. Realiza la distribución y colaboración de las funciones del sistemadividiendo el sistema en dos partes : cliente y servidor .

El usuario necesita descargar e instalar el programa cliente localmente, y hay un programa del lado del servidor de forma remota

En la arquitectura CS, el cliente se refiere al equipo terminal utilizado por el usuario, como una computadora personal, teléfono móvil o tableta, etc., que se comunican con el servidor a través de la red. El cliente es responsable de enviar solicitudes, recibir y mostrar los datos devueltos por el servidor y proporcionar la interfaz de usuario y las funciones interactivas.

El servidor es la unidad central de control responsable de procesar y responder a las solicitudes enviadas por los clientes. Un servidor puede ser una computadora independiente o un sistema compuesto por varios clústeres de computadoras. Ejecuta la aplicación web, recibe las solicitudes de los clientes, las procesa y envía los resultados procesados ​​al cliente.

Las características de la arquitectura CS son las siguientes:

  1. Distribuido : el cliente y el servidor pueden ejecutarse en diferentes dispositivos y comunicarse a través de la red, de modo que las funciones y la carga del sistema pueden distribuirse en diferentes máquinas, mejorando la escalabilidad y el rendimiento del sistema.
  2. Centralización : como unidad de control central, el servidor es responsable de procesar y administrar las solicitudes y los datos de los clientes, realizar una administración unificada de todo el sistema y facilitar el mantenimiento y la depuración.
  3. Acoplamiento débil : el cliente y el servidor se comunican a través de protocolos acordados, son independientes entre sí y se pueden actualizar y mejorar de forma independiente sin afectar la función y la estabilidad de cada uno.
  4. Eficiencia : el servidor puede procesar de manera centralizada una gran cantidad de solicitudes y datos, compartir recursos y asignar tareas de manera eficiente, y mejorar la capacidad de procesamiento simultáneo y la velocidad de respuesta del sistema.

La arquitectura CS se usa ampliamente en varias aplicaciones de Internet, como sitios web, sistemas de comercio electrónico, redes sociales, etc., y proporciona una forma eficiente de implementar servicios y computación distribuidos.

ventaja:

  1. Distribuido: La arquitectura CS divide el sistema en dos partes: cliente y servidor, que pueden distribuir las funciones y la carga del sistema en diferentes máquinas, mejorando la escalabilidad y el rendimiento del sistema.
  2. Gestión centralizada: como unidad de control central, el servidor es responsable de procesar y gestionar las solicitudes y los datos de los clientes, realizar una gestión y un control unificados de todo el sistema y facilitar el mantenimiento y las actualizaciones.
  3. Acoplamiento débil: el cliente y el servidor se comunican a través de protocolos acordados, son independientes entre sí y se pueden actualizar y mejorar de forma independiente sin afectar la función y la estabilidad de cada uno.
  4. Eficiencia: el servidor procesa de forma centralizada una gran cantidad de solicitudes y datos, realiza un uso compartido de recursos y una asignación de tareas eficientes, y mejora la capacidad de procesamiento simultáneo y la velocidad de respuesta del sistema.

defecto:

  1. Punto único de falla: en la arquitectura CS, el servidor es el núcleo del sistema. Si el servidor falla o no está disponible, todo el sistema no podrá funcionar con normalidad y existe el riesgo de un punto único de falla.
  2. Sobrecarga de comunicación: dado que el cliente y el servidor se comunican a través de la red, existe una cierta cantidad de sobrecarga de comunicación, especialmente cuando se comunica a través de redes o de forma remota, lo que puede aumentar la latencia y la carga de la red.
  3. Difícil de lograr en tiempo real: en la arquitectura CS, el cliente debe esperar a que el servidor responda después de iniciar una solicitud.Este modo de solicitud-respuesta dificulta la implementación de aplicaciones con altos requisitos de tiempo real.

arquitectura BS:

La arquitectura BS , es decir, la arquitectura de navegador-servidor, es una arquitectura en capas común y uno de los patrones arquitectónicos comúnmente utilizados en las aplicaciones de Internet.

Los usuarios necesitan usar navegadores para acceder a las páginas y los clientes acceden a diferentes servidores.

En la arquitectura BS, el cliente accede y utiliza el programa de aplicación a través de un navegador, y el servidor se encarga de procesar la solicitud enviada por el cliente y enviar una respuesta. El cliente y el servidor se comunican a través de la red.

Las características de la arquitectura BS son las siguientes:

  1. Arquitectura en capas : la arquitectura BS divide el sistema en dos capas, a saber, la capa del cliente y la capa del servidor. La capa de cliente incluye el navegador utilizado por el usuario y es responsable de mostrar la interfaz de usuario y proporcionar interacción con el usuario. La capa del servidor es responsable del procesamiento y la gestión de datos, el procesamiento lógico y la interacción con la base de datos.
  2. Centralización : como unidad de control central, el servidor es responsable del procesamiento de datos y la lógica empresarial. El cliente envía una solicitud a través del navegador, y el servidor recibe la solicitud y da una respuesta, realizando la gestión y el control centralizados del sistema.
  3. Multiplataforma : Dado que el cliente utiliza un navegador y no depende de un sistema operativo o dispositivo específico, la aplicación puede ejecutarse en diferentes plataformas sin instalación adicional o actualización.
  4. Interfaz unificada : en la arquitectura BS, los usuarios acceden a las aplicaciones a través de un navegador, ya sea en una PC o en un dispositivo móvil, proporcionando una interfaz y una experiencia de usuario unificadas.
  5. Simplifique el cliente : el cliente solo necesita tener un navegador y una conexión de red, y no es necesario instalar aplicaciones complicadas, lo que reduce la carga del cliente.

Una aplicación típica de la arquitectura BS son las aplicaciones web, como sitios web, servicios de correo electrónico, suites de oficina en línea, etc. Sus ventajas incluyen una fácil implementación y mantenimiento, soporte multiplataforma y dependencias y complejidad reducidas del cliente. Sin embargo, dado que la mayor parte de la lógica comercial se procesa en el lado del servidor, la presión sobre el servidor puede aumentar y existen ciertos requisitos para la calidad y la estabilidad de la conexión de red.

ventaja:

  1. Multiplataforma: al usar el navegador como cliente, la arquitectura BS puede realizar el acceso a programas de aplicaciones en diferentes sistemas operativos y dispositivos, sin necesidad de desarrollar y mantener múltiples versiones de clientes para diferentes plataformas, lo que mejora la eficiencia del desarrollo.
  2. Simplificar el cliente: Dado que el cliente es principalmente un navegador, no hay necesidad de instalar aplicaciones complicadas, y la mayoría de las funciones las completa el servidor, lo que reduce la ocupación de recursos y la complejidad del dispositivo del usuario.
  3. Control y administración centralizados: la arquitectura BS concentra los datos centrales y la lógica comercial en el lado del servidor, lo que hace que la administración y el mantenimiento del sistema sean más centralizados y convenientes, y se pueden actualizar y mejorar rápidamente.
  4. Interfaz y experiencia unificadas: toda la interfaz de usuario y las operaciones se completan a través del navegador, lo que proporciona una interfaz y una experiencia de usuario unificadas, lo que reduce los costos de aprendizaje y el tiempo de adaptación del usuario.

defecto:

  1. Requisitos para la conexión a la red y ancho de banda: Las aplicaciones de la arquitectura BS deben ser accedidas y operadas a través de un servidor de conexión a la red, y tienen ciertos requisitos para la calidad y estabilidad de la conexión a la red.Si la red es inestable o el ancho de banda es limitado, puede conducir a una disminución en la experiencia del usuario.
  2. Mayor presión del servidor: dado que la mayor parte de la lógica comercial se procesa en el lado del servidor, el servidor debe realizar más trabajo de cómputo y procesamiento, y debe tener suficiente rendimiento y escalabilidad; de lo contrario, puede enfrentar cuellos de botella o inestabilidad en el rendimiento.
  3. Confianza en el servidor: en la arquitectura BS, las funciones principales y los datos del sistema se almacenan en el lado del servidor.Si el servidor falla o no está disponible, los usuarios no podrán acceder ni utilizar el sistema.
  4. Cuestiones de privacidad y seguridad: dado que los datos del usuario y la información confidencial se almacenan en el lado del servidor, los requisitos de seguridad para el servidor son relativamente altos y se deben tomar las medidas de seguridad correspondientes para proteger la privacidad de los datos del usuario y la seguridad del sistema.

Tres elementos de la programación de red:

  1. Dirección IP (Dirección de Protocolo de Internet) : Una dirección IP es un identificador único que se utiliza para identificar y ubicar un dispositivo en la red. IPV4 consta de 4 bytes, generalmenteexpresados ​​en puntos decimales (es decir, expresando los cuatro bytes como números) (como 192.168.0.1). En la programación de redes, la dirección IP se usa para identificar el host de destino al que conectarse o la interfaz de red para escuchar.

  2. Número de puerto (Port Number) : El número de puerto se utiliza para identificar una aplicación o servicio específico. Es un número de 16 bits que va de 0 a 65535. Entre ellos, del 0 al 1023 se reservan como puertos conocidos de uso común para algunos servicios específicos, como el puerto 80 de HTTP, el puerto 443 de HTTPS, etc. En la programación de redes, los clientes y servidores se comunican y distinguen a través de diferentes números de puerto.

  3. Protocolo (Protocol) : El protocolo define las reglas y convenciones en la comunicación de red. Los protocolos de red comunes incluyen TCP (Protocolo de control de transmisión), UDP (Protocolo de datagramas de usuario) y HTTP (Protocolo de transferencia de hipertexto). TCP proporciona una comunicación fiable orientada a la conexión, adecuada para aplicaciones que requieren una transmisión fiable; UDP proporciona una comunicación sin conexión, adecuada para aplicaciones con altos requisitos de tiempo real; HTTP es un protocolo de capa de aplicación que se utiliza para transmitir supertexto y otros datos.

Estos tres elementos juegan un papel importante en la programación de la red. Los clientes y servidores establecen conexiones a través de direcciones IP y números de puerto, se comunican usando protocolos específicos y realizan interacción y transmisión de datos. Otros conceptos y tecnologías en la programación de redes, como sockets (Socket), solicitudes y respuestas HTTP, capas de transporte de red, etc., se desarrollan alrededor de estos tres elementos.

Nos queremos centrar en introducir el protocolo UDP y el protocolo TCP en el protocolo, es recomendable que los memorices directamente:

Protocolo UDP:

  • Protocolo de datagramas de usuario
  • UDP es un protocolo de comunicación sin conexión
  • La velocidad es rápida, hay un límite de tamaño y se puede enviar un máximo de 64 K a la vez, y los datos no son seguros y fáciles de perder

El protocolo UDP funciona de la siguiente manera:

  1. La aplicación divide los datos a transmitir en paquetes más pequeños (datagramas).
  2. El datagrama agrega un encabezado de protocolo UDP, que incluye información como el puerto de origen y el puerto de destino.
  3. Envía el datagrama al host de destino.
  4. El receptor entrega el datagrama a la aplicación correspondiente para su procesamiento de acuerdo con la información del puerto en el encabezado UDP.
  5. El receptor no envía ninguna respuesta de confirmación y no realiza el manejo de errores, como la retransmisión.

El protocolo UDP es adecuado para escenarios de aplicaciones con altos requisitos en tiempo real y bajos requisitos de confiabilidad de datos, como transmisión de video en tiempo real, transmisión de audio, etc. En estos escenarios, una ligera pérdida de datos no tendrá mucho impacto en la ejecución de la aplicación.

public class UDPtest {
    public static void main(String[] args) {
        // 启动服务器端
        new Thread(new UDPServer()).start();
        // 启动客户端
        new Thread(new UDPClient()).start();
    }
}

class UDPServer implements Runnable {
    @Override
    public void run() {
        try {
            // 创建服务器端Socket对象,监听指定端口号
            DatagramSocket serverSocket = new DatagramSocket(8888);

            byte[] receiveData = new byte[1024];

            while (true) {
                // 创建接收数据包
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

                // 接收数据
                serverSocket.receive(receivePacket);

                // 解析接收到的数据
                String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
                System.out.println("Server received: " + message);

                // 发送响应数据
                InetAddress IPAddress = receivePacket.getAddress();
                int port = receivePacket.getPort();
                String responseMessage = "Hello, client!";
                byte[] sendData = responseMessage.getBytes();
                DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
                serverSocket.send(sendPacket);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class UDPClient implements Runnable {
    @Override
    public void run() {
        try {
            // 创建客户端Socket对象
            DatagramSocket clientSocket = new DatagramSocket();

            // 设置服务器端IP地址和端口号
            InetAddress IPAddress = InetAddress.getByName("localhost");
            int port = 8888;

            // 发送数据
            String message = "Hello, server!";
            byte[] sendData = message.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
            clientSocket.send(sendPacket);

            // 创建接收数据包
            byte[] receiveData = new byte[1024];
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

            // 接收数据
            clientSocket.receive(receivePacket);

            // 解析接收到的数据
            String responseMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
            System.out.println("Client received: " + responseMessage);

            // 关闭Socket连接
            clientSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Protocolo TCP:

  • Protocolo de control de transmisión TCP (Protocolo de control de transmisión)
  • TCP es un protocolo de comunicación orientado a la conexión
  • Velocidad lenta, sin límite de tamaño, seguridad de datos

El protocolo TCP funciona de la siguiente manera:

  1. Iniciar una conexión: el remitente envía un paquete SYN (sincronización) al receptor, y el receptor responde con un paquete SYN+ACK después de recibirlo, y el remitente responde con un paquete ACK para completar el establecimiento de la conexión.
  2. Transmisión de datos: una vez que se establece la conexión, el remitente divide los datos en segmentos de datos más pequeños y agrega información de encabezado TCP, incluido el número de serie, el número de confirmación, etc. El emisor envía el segmento de datos al receptor.
  3. Confirmación de datos: después de recibir el segmento de datos, el receptor enviará un acuse de recibo, indicando que se ha recibido el segmento de datos; el remitente enviará el siguiente segmento de datos después de recibir el ACK.
  4. Control de congestión: si hay congestión en la red, el receptor controlará el flujo a través de la ventana de congestión y el remitente ajustará la ventana de congestión de acuerdo con el ACK recibido para evitar la congestión de la red.
  5. Cierre de la conexión: cuando se completa la transmisión de datos, el remitente y el receptor pueden iniciar el cierre de la conexión. El remitente envía un paquete FIN, el receptor responde con un paquete ACK después de recibirlo, luego envía un paquete FIN y finalmente el remitente responde con un paquete ACK para completar el cierre de la conexión.

El protocolo TCP es adecuado para escenarios de aplicaciones que requieren una alta confiabilidad y orden de los datos, como la transferencia de archivos, el correo electrónico y la navegación web. Aunque la sobrecarga del protocolo TCP es grande, su confiabilidad y orden permiten que los datos se transmitan en el orden correcto y pueden garantizar que los datos no se pierdan ni se dañen.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class TCPClientServer {
    public static void main(String[] args) {
        // 启动服务器端
        new Thread(new TCPServer()).start();
        // 启动客户端
        new Thread(new TCPClient()).start();
    }
}

class TCPServer implements Runnable {
    @Override
    public void run() {
        try {
            // 创建服务器端Socket对象,监听指定端口号
            java.net.ServerSocket serverSocket = new java.net.ServerSocket(8888);

            while (true) {
                // 等待客户端连接
                Socket clientSocket = serverSocket.accept();
                System.out.println("Server connected");

                // 获取输入流和输出流
                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                // 读取客户端发送的数据
                String message = in.readLine();
                System.out.println("Server received: " + message);

                // 发送响应数据
                String responseMessage = "Hello, client!";
                out.println(responseMessage);

                // 关闭连接
                clientSocket.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class TCPClient implements Runnable {
    @Override
    public void run() {
        try {
            // 创建客户端Socket对象,连接服务器
            Socket clientSocket = new Socket("localhost", 8888);
            System.out.println("Client connected");

            // 获取输入流和输出流
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            // 发送数据
            String message = "Hello, server!";
            out.println(message);

            // 读取服务器端发送的响应数据
            String responseMessage = in.readLine();
            System.out.println("Client received: " + responseMessage);

            // 关闭连接
            clientSocket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Resumir:

        Este es el final de nuestra introducción a la programación de redes de hoy, y presentaremos otros puntos de conocimiento en la programación de redes en detalle más adelante. Hay muchos puntos de conocimiento en la programación de redes, por lo que debemos recordar más, para que podamos dominar la programación de redes con soltura.

Si mi contenido es útil para ti, dale me gusta, comenta y marca . ¡La creación no es fácil, el apoyo de todos es mi motivación para perseverar!

 

Supongo que te gusta

Origin blog.csdn.net/fckbb/article/details/132164455
Recomendado
Clasificación