Red de conocimientos turísticos - Conocimientos sobre calendario chino - Para desarrollar JAVA de comunicación de red, ¿necesita principalmente aprender el contenido explicativo?

Para desarrollar JAVA de comunicación de red, ¿necesita principalmente aprender el contenido explicativo?

1. Dirección IP y número de puerto

Si las computadoras en la red necesitan comunicarse entre sí, deben asignar un número de identificación a cada computadora. El número de identificación se utiliza para especificar. los datos a recibir y para identificar los datos enviados. La "identidad" en el protocolo TCP/IP es la dirección IP.

Una computadora puede ejecutar múltiples programas de red al mismo tiempo. Los datos se pueden enviar a la computadora usando la dirección IP, pero no hay garantía de a qué programa de red se enviarán los datos. Por lo tanto, el encabezado de cada paquete de datos de red enviado tiene una parte de "puerto", que es un número entero y se utiliza para indicar a qué aplicación se entrega la trama de datos para su procesamiento. Al mismo tiempo, también debe especificar un número de puerto para el programa de red para que diferentes aplicaciones puedan recibir datos en diferentes puertos.

Un mismo ordenador no puede tener varios programas usando el mismo puerto. El rango de números de puerto está entre 0-65535, de los cuales los números de puerto entre 0-1023 se usan para aplicaciones y servicios de red conocidos, y los números de puerto superiores a 1024 se usan para aplicaciones ordinarias. Esto puede evitar la red representada por el puerto. Número. Uso de la cadena del programa.

2.TCP y UDP

TCP es el Protocolo de Control de Transmisión y UDP es el Protocolo de Datagramas de Usuario. TCP es un protocolo de comunicación orientado a la conexión que proporciona una transferencia de datos confiable y sin errores entre dos computadoras. Cuando una aplicación utiliza TCP para comunicarse, se establece una conexión virtual entre la fuente de datos y el destino. Una vez establecida la conexión, los datos se pueden intercambiar entre las dos computadoras como un flujo de bytes bidireccional.

UDP es un protocolo de comunicación sin conexión. No garantiza una transmisión de datos confiable, pero puede realizar la función de enviar datos a varios objetivos.

3. Introducción a Socket

Socket (socket) es la interfaz y el mecanismo proporcionados por la capa de controlador de red para aplicaciones. Su función puede considerarse como un puerto creado para aplicaciones.

4. Descripción general de la programación de la red TCP

Los pasos de operación específicos del protocolo TCP son los siguientes:

(1) El programa del servidor crea un objeto ServerSocket , llama al método aceptar() y espera la conexión del extremo del cliente.

(2) El programa cliente crea un objeto Socket y establece una conexión de línea dedicada con el cliente.

(3) El servidor recibe la solicitud de conexión del cliente y crea un nuevo objeto Socket para establecer una conexión de línea dedicada con el cliente.

(4) Date cuenta de que los dos Sockets establecidos en los pasos (2) y (3) hablan en el mismo hilo.

(5) El servidor vuelve a esperar nuevas solicitudes de conexión.

5. Clase ServerSocket

Para escribir un programa de servidor de red TCP, necesita utilizar la clase ServerSocket para crear un servidor.

Los métodos principales de la clase ServerSocket son los siguientes:

Descripción del tipo de método

El método constructor público ServerSocket(int port) crea una instancia de ServerSocket

público El método aceptar() de Socket espera a que el cliente se conecte

El método público InetAddress getInetAddress() devuelve la dirección IP del servidor

El booleano público isClosed( ) devuelve el estado cerrado de ServerSocket

El método public void close() cierra ServerSocket

Cada vez que se ejecuta el servidor, necesita llamar al método aceptar() para esperar a que cliente para conectarse. Después de ejecutar el método, el servidor entrará en el estado de bloqueo hasta que el cliente se conecte nuevamente. El tipo de retorno del método aceptar() es Socket.

6.Clase Socket

El cliente debe crear un objeto Socket para establecer una conexión con el servidor. Cada objeto Socket representa un cliente.

Los métodos comunes de la clase Socket son los siguientes:

Descripción del tipo de método

El método constructor público Socket(String host, int port) crea un Socket objeto y especifica la conexión que se realizará. El nombre de host y el número de producto del servidor.

El método público InputStream getInputStream() devuelve el flujo de entrada del socket.

El método público OutputStream getOutputStream. () devuelve el flujo de salida del socket

El método público booleano isClosed() devuelve el estado cerrado del socket

El método público void close() cierra este Socket

p>

Nota: La información en la programación de la red TCP utiliza entrada y salida y se entrega en forma de flujo.

7.Programa del servidor TCP

Escriba el programa del servidor TCP, el código es el siguiente:

paquete com;

importar java .net.* ;

importar java.io.*;

clase pública TcpServer{

public static void main(String []a){

ServerSocket server=null;

Socket socket=null;

BufferedReader in=null;

PrintWriter out=null;

try {

//El servidor escucha en el puerto 9000

server=new ServerSocket(9000);

//Recibe conexiones de clientes

socket=server.accept();

//Obtener información de entrada del cliente

in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//Enviar información al cliente, verdadero significa actualizar automáticamente el búfer

out=new PrintWriter(socket.getOutputStream(),true);

out.println ("Se ha establecido una conexión con el servidor");

String info=in.readLine();

System.out.println("La entrada del cliente es: "+info);

}catch(Exception e){

e.printStackTrace();

}

finalmente{

intentar{

in.close();

out.close();

socket.close();

servidor. close();

}catch(Exception e){

e.printStackTrace();

}

}

}

}

Para verificar si el programa del lado del servidor puede funcionar normalmente, el programa también debe proporcionar un programa cliente para comunicarse con el servidor. El programa telnet en el sistema Windows es un cliente TCP que viene con el sistema. Puede utilizar telnet para probar la comunicación con el servidor. Al ejecutar telnet, especifique la dirección IP y el número de puerto para conectarse al servidor. Una vez establecida la conexión, la ventana del programa telnet puede enviar el contenido de entrada al servidor y mostrar los datos recibidos del servidor. Los pasos de la prueba son los siguientes:

(1) Ejecute el programa del lado del servidor

(2) Ejecute telnet 127.0.0.1 9000 en la ventana de DOS desde el programa del lado del servidor. y el programa cliente están en la misma computadora, máquina, por lo que puede usar 127.0.0.1 para representar esta máquina.

Nota: Llamar al método aceptar () una vez solo puede aceptar una conexión. Para aceptar múltiples conexiones, el método debe colocarse en una declaración de bucle Al mismo tiempo, la entrada y salida de datos de cada una. Los datos de la conexión también deben colocarse en un Solo en declaraciones de bucle se puede lograr un intercambio continuo entre el servidor y el cliente.

servicio de clase implementa Runnable{

Socket socket=null;

BufferedReader in=null;

PrintWriter out=null;

p>

Servicio público (Socket){

this.socket=socket;

}

public void run() {

//Obtener información de entrada del cliente

in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

//Enviar información al cliente, verdadero es Actualizar automáticamente el búfer

out=new PrintWriter(socket.getOutputStream(),true);

// Bucle para leer datos del cliente y escribir datos en el cliente

while(true){

out.println("Se ha establecido una conexión con el servidor");

System.out.println("El cliente dijo: "+ in.readLine());

}

}

catch(Exception e){

e.printStackTrace ();

}

finalmente{

prueba{

in.close();

out .close() ;

socket.close();

server.close();

}catch(Exception e){

e. printStackTrace();

}

}

}

}

clase pública TcpServer {

ServerSocket server=null;

Socket socket=null;

try{

//El servidor escucha en el puerto 9000

server=new ServerSocket(9000);

//Recibir múltiples conexiones de clientes

while(true){

socket=server. aceptar( );

nuevo hilo(nuevo servicio(socket)).start();

}catch(Exception e){

e.printStackTrace(

}

}

}

Programa cliente 8.TCP

paquete com;

p >

importar java.net.*;

importar java.io.*;

clase pública TcpClient{

public static void main(String [ ]a){

ServerSocket server=null;

Socket socket=null;

BufferedReader in=null;

Entrada BufferedReader = nulo;

PrintWriter out=null;

prueba{

socket=new Socket("127.0.0.1",9000);

while(true){

input=new BufferedReader(new InputStreamReader(System.in);

in=new BufferedReader(new InputStreamReader(socket.getInputStream()));

}

//Enviar información al servidor, verdadero significa actualizar automáticamente el búfer

out=new PrintWriter(socket.getOutputStream(),true);

out.println ("El cliente dijo: "+input.readLine);

String info=in.readLine();

System.out.println("El servidor dijo: "+info);

}catch(Excepción e){

e.printStackTrace();

}

}

}

9.Programación de red UDP

(1) La clase DatagramSocket se utiliza principalmente para enviar y recibir información.

Los métodos principales de la clase DatagramSocket:

Descripción del tipo de método

El método constructor público DatagramSocket() construye un objeto DatagramSocket sin especificar un puerto de escucha

El método constructor público DatagramSocket(int port) construye un DatagramSocket objeto que especifica un puerto de escucha

El método public void send(DatagramPacket p) envía datagramas

El método public void recibir(DatagramPacket p) recibe datagramas

(2 )Clase DatagramPacket

p>

La clase DatagramPacket se utiliza para empaquetar un fragmento de información que se enviará o recibirá. Tanto el envío como la recepción de datos requieren la construcción de un objeto DatagramPacket.

Métodos principales de la clase DatagramPacket:

Descripción del tipo de método

El constructor público DatagramPacket(byte[] buf,en longitud) especifica el espacio de memoria al construir el Objeto y tamaño de DatagramPacket

Público DatagramPacket(byte[] buf, longitud, dirección InetAddress, puerto int) Igual que arriba

El método público byte[] getData() devuelve los datos recibidos

El método public int getLength() devuelve la longitud de los datos enviados o recibidos

El método público InetAddress getAddress() devuelve la dirección de la máquina

(3)InetAddress clase

La clase InetAddress se utiliza para representar direcciones de computadora. Los métodos principales son los siguientes:

Descripción del tipo de método

public static InetAddress getByName(String host). El método obtiene un objeto InetAddress a través del nombre de host o la dirección IP

El método público String getHostName() obtiene el nombre de host correspondiente a la dirección IP

El método público String getHostAddress() devuelve la cadena de dirección IP

10. Programación UDP

Escribir un programa de red UDP requiere escribir un programa de envío y un programa de recepción por separado

(1) Programa de envío

paquete com;

importar java. net.*;

clase pública UdpSend{

public static void main(String [] a ){

DatagramSocket ds=null;

DatagramPacket dp=null

byte[] buf=nuevo byte[1024];

try{

//La clase DatagramSocket se utiliza para completar el mensaje Enviar

ds=new DatagramSocket();

String info="hello world";

dp=new DatagramPacket(info.getBytes(),info. length,InetAddress.getByName("localhost"),3000);

//Enviar paquete de datos

ds.send(dp);

}catch( Excepción e){

e.printStackTrace();

}

finalmente

{

ds.close(); //Después de enviar el mensaje, cierra el objeto

}

}

}

(2) Programa receptor

paquete com;

importar java.net.*;

público clase UdpRecv{

public static void main(String [] a){

DatagramSocket ds=null;

DatagramPacket dp=null; p> byte [] buf=new byte[1024];

try{

//La clase DatagramSocket se utiliza para completar el envío de mensajes

ds= new DatagramSocket();

dp=new DatagramPacket(buf,1024);

//Recibir datos del remitente

ds.receive(dp);

String str=new String(dp.getData(),0,dp.getLength());

str=str+" from "+dp.getAddress.getHostAddress();

System.out.println(str);

}catch(Exception e){

e.printStackTrace();

}

finalmente

{

ds.close(); //Después de enviar el mensaje, cierra el objeto

}

}

}