De acuerdo con una implementación de un encargo de Java sub delimitador

Netty puede ser muy sencillo de utilizar la subcontratación.

Este artículo describe un método que utiliza JDK viene con subcontratistas, es compatible con Java o Android lado.

Adecuado para socket, Bluetooth, comunicación wifi.

1 socket formas de palo de paquetes y desembalaje

  1. Terminal de recepción recibe normalmente dos paquetes, es decir, el paquete de palo y fenómeno de desembalaje no se produce, sin el uso de tal tratamiento especial.
  2. El receptor sólo recibe un paquete que contiene dos o más paquetes de datos, tal fenómeno es el paquete de palo, dividido manualmente.
  3. Se divide en un paquete de datos transmitido varias veces, cada vez que se recibe el paquete de datos no está completa, esto se llama el desembalaje, la combinación manualmente.
  4. Al mismo tiempo el desembalaje y paquetes de inmersión, como el envío de dos paquetes AAA y BBB, el receptor recibe dos paquetes aa, ABBB.

2 de acuerdo con una implementación de un encargo de Java sub delimitador

2.1 Si el delimitador es un salto de línea \ r o \ n o \ r \ n

public static void main(String[] args) {
        String hostname = "127.0.0.1";
        int port = 5209;
        
        try (Socket socket = new Socket(hostname, port)) {
            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);
            writer.println("Hello,I am client");

            InputStream input = socket.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(input));
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (UnknownHostException ex) {
            System.out.println("Server not found: " + ex.getMessage());
        } catch (IOException ex) {
            System.out.println("I/O error: " + ex.getMessage());
        }
    }
复制代码

2,2 separador personalizado utilizado en el Ejemplo ETX (0x03) como un delimitador

public static void main(String[] args) {
        String hostname = "127.0.0.1";
        int port = 5209;

        try (Socket socket = new Socket(hostname, port)) {
            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);
            writer.println("Hello,I am client");

            InputStream input = socket.getInputStream();
            Scanner scan = new Scanner(input);
            scan.useDelimiter(new String(new byte[]{0x03}));
            while (scan.hasNext()) {
                String line = scan.next();
                System.out.println(line);
            }
        } catch (UnknownHostException ex) {
            System.out.println("Server not found: " + ex.getMessage());
        } catch (IOException ex) {
            System.out.println("I/O error: " + ex.getMessage());
        }
    }
复制代码

Supongo que te gusta

Origin juejin.im/post/5e8d7a24e51d4546d32bcd13
Recomendado
Clasificación