notas de estudio java - programación de red

1. Introducción a la programación de redes

Programación de red: bajo el protocolo de comunicación de red, el intercambio de datos se puede realizar entre programas que se ejecutan en diferentes computadoras que realizan la interconexión de red

1.1, tres elementos de la programación en red

Dirección IP: para que las computadoras en la red se comuniquen entre sí, a cada computadora se le debe asignar un número de identificación, que se usa para especificar la computadora para recibir datos y la computadora para identificar la computadora que envía, y la dirección IP es esta número de identificación, también conocido como dirección IP.Es el
puerto de identificación del dispositivo: la comunicación de la red es esencialmente la comunicación de dos aplicaciones. Cada computadora tiene muchas aplicaciones, entonces, ¿cómo distinguir estas aplicaciones en la comunicación de red? Si la dirección IP puede identificar de manera única el dispositivo en la red, entonces el número de puerto puede identificar de manera única la aplicación en el dispositivo. Es decir, el protocolo de identificación de la aplicación
: se pueden conectar varias computadoras a través de una red informática. Las computadoras en la misma red deben cumplir con ciertas reglas al conectarse y comunicarse, al igual que un automóvil de color neutro en la carretera. Solo siga las Normas de tráfico. En una red informática, estas reglas de conexión y comunicación se denominan protocolos de comunicación de red, que establecen normas uniformes sobre el formato de transmisión, la velocidad de transmisión y los pasos de transmisión de datos, y ambas partes deben cumplirlas para completar el intercambio de datos. Los protocolos comunes son el protocolo UDP y el protocolo TCP.

1.2, dirección IP: es la identificación única del dispositivo en la red

Las direcciones IP se dividen en dos categorías: IPv4
Comandos comunes de IPv6:
ipconfig: verifique la dirección IP local
ping Dirección IP: verifique si la red está conectada
Dirección IP especial:
127.0.0.1: es la dirección de bucle invertido, que puede representar la dirección local, generalmente se usa para probar

1.3, el uso de InetAddress

Para facilitar nuestra adquisición y operación de direcciones IP, Jaca proporciona una clase InetAddress para que usemos
InetAddress: Esta clase identifica la dirección de Protocolo de Internet (IP)
estática InetAddress getByName(String host): Determina la dirección IP del nombre de host. El nombre de host puede ser un nombre de máquina o una dirección IP
String getHostName(): Obtener el nombre de host de esta dirección IP
String getHostAddress(): Devuelve la cadena de dirección IP en la pantalla de texto

1.4, puerto, protocolo

Puerto: el número de puerto de identificación único de la aplicación en el dispositivo
: un número entero representado por dos bytes, su rango de valores es de 0 a 65535. El número de puerto entre 0 y 1023 se usa para algunos servicios y aplicaciones de red conocidos, aplicaciones ordinarias necesita usar números de puerto por encima de 1024.
Protocolo: En las redes informáticas, las reglas para la conexión y la comunicación se denominan protocolos de comunicación de red.Protocolo
UDP: Protocolo de datagramas de usuario, es un protocolo de comunicación sin conexión. Debido al bajo consumo de recursos y la alta eficiencia de comunicación utilizando el protocolo UDP, todos suelen ser utilizados para la transmisión de audio, video y datos en general. Sin embargo, no se recomienda utilizar el protocolo UDP Protocolo TCP al transmitir datos importantes
: el Protocolo de control de transmisión es un protocolo de comunicación orientado a la conexión, es decir, antes de transmitir datos, se establece una conexión lógica entre el remitente y el receptor, y luego los datos son transmitidos Proporciona dos Transferencia de datos confiable y sin errores entre computadoras. En la conexión TCP, es necesario aclarar el cliente y el servidor, y el cliente envía una solicitud de conexión al servidor.La creación de cada conexión requiere un "apretón de manos
de tres vías": en el protocolo TCP, en la etapa de preparación para el envío de datos, el cliente Tres interacciones entre el cliente y el servidor para garantizar la confiabilidad de la conexión El
primer apretón de manos, el cliente envía una solicitud de conexión al servidor, espera que el servidor confirme
el segundo apretón de manos y el servidor envía una respuesta al cliente, notificando al cliente que ha recibido la solicitud de conexión
El tercer protocolo de enlace, el cliente envía información de confirmación al servidor nuevamente para confirmar que la conexión
ha completado el protocolo de enlace de tres vías. , el cliente y el servidor pueden iniciar la transmisión de datos. Debido a esta función orientada a la conexión, el protocolo TCP puede garantizar la seguridad de los datos transmitidos.

2. Programa de comunicación UDP

2.1, principio de comunicación UDP

El protocolo UDP es un protocolo de red poco fiable. Establece un objeto Socket en ambos extremos de la comunicación, pero estos dos Sockets son solo objetos para enviar y recibir datos. Por lo tanto, no existe la llamada comunicación entre las dos partes basada en el Protocolo UDP El concepto de cliente y servidor
JAVA proporciona la clase DaragramSocket como un Socket basado en UDP
para enviar datos:
1. Crear un objeto Socket (DatagranmSocket) en el lado del remitente
2. Crear datos y empaquetar los datos DategramPacket(byte[ ] buf, longitud int, dirección InetAddress, puerto int)
3. Llame al método del objeto DatagramSocket para enviar datos: void send(DatagramSocket p);
4. Cierre el remitente: void close();
Pasos para recibir datos:
1. Cree un objeto Socket (DaragramSocket) del receptor: DatagramSocket(int port)
2. Cree un paquete de datos para recibir datos: DatagramPacket(byte[] buf, int length)
3. Llame al método del objeto DatagramSocket para recibir datos: void recibir (DatagramPacket p)
4. Analice el paquete de datos y muestre los datos en la consola: byte [] getData (); int getLength ();
5. Cierre el extremo receptor

2.2, práctica del programa de comunicación UDP

Datos de envío UDP: los datos provienen de la entrada del teclado, hasta que los datos de entrada son 886, los datos de envío terminan Datos
de recepción UDP: debido a que el receptor no sabe cuándo el remitente deja de enviar, adopta un bucle infinito para recibir

package UDP;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class SendDemo {
    
    
	public static void main(String[] args) throws IOException {
    
    
		
		DatagramSocket ds = new DatagramSocket();
		
		System.out.println("输入:");
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String line;
		while((line = br.readLine()) != null) {
    
    
			if("886".equals(line)) {
    
    
				break;
			}
			
			byte[] bys = line.getBytes();
			DatagramPacket dp = new DatagramPacket(bys,bys.length,InetAddress.getByName("192.168.2.225"),12345);
			
			ds.send(dp);
		}
		
		ds.close();
		
	}
}
package UDP;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class ReveiveDemo {
    
    
	public static void main(String[] args) throws IOException {
    
    
		DatagramSocket ds = new DatagramSocket(12345);
		
		
		while(true) {
    
    
			
		
			byte[] bys=  new byte[1024];
			DatagramPacket dp = new DatagramPacket(bys,bys.length);
			
			ds.receive(dp);
			
			System.out.println("数据是:"+new String(dp.getData(),0,dp.getLength()));
			
			
		}
		
	}
}

3. Programa de comunicación TCP

3.1, principio de comunicación TCP

El protocolo de comunicación TCP es un protocolo de red confiable. Establece un objeto Socket en ambos extremos de la comunicación, formando así un enlace virtual de red en ambos extremos de la comunicación. Una vez que se establece el enlace de red virtual, los programas en ambos extremos pueden pasar enlace virtual para la comunicación.
Java proporciona una buena encapsulación para la red basada en el protocolo TCP. Utiliza objetos Socket para representar los puertos de comunicación en ambos extremos y genera flujos de E/S a través de Socket para la comunicación de red.
Java proporciona la clase Socket para el cliente y la clase ServerSocket para el servidor para
enviar los pasos de datos:
1. Crear un objeto Socket del cliente (Socket): Socket(String host, int port)
2. Obtener el flujo de salida, escribir datos: OutputStream getOutputStream()
3. Liberar recursos: void close();
Pasos para recibir datos:
1. Cree un objeto Socket del lado del servidor (ServerSocket): ServerSocket (puerto int)
2. Supervise la conexión del cliente y devuelva un objeto Socket: Socket accept();
3. Obtenga el flujo de entrada, lea los datos y mostrar los datos en la consola: InputStream getInputStream()
4. Liberar recursos: void close();

3.2, caso TCP

package TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class ClienDemo {
    
    
	public static void main(String[] args) throws UnknownHostException, IOException {
    
    
		
		//创建客户端的Socket对象
		Socket s = new Socket("192.168.2.225",10000);
		
		//获取输出流,写数据
		OutputStream os = s.getOutputStream();
		os.write("hello,我来了".getBytes());
		
		//接收服务器反馈
		InputStream is = s.getInputStream();
		byte[] bys = new byte[1024];
		int len = is.read(bys);
		String data = new String(bys,0,len);
		System.out.println("客户端:"+data);
		
		//释放资源
		s.close();
		
	}
}
package TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerDemo {
    
    
	public static void main(String[] args) throws IOException {
    
    
		
		//创建服务器端的Socket对象
		ServerSocket ss = new ServerSocket(10000);
		
		//监听客户端连接,返回一个Socket对象
		Socket s = ss.accept();
		
		//获取输入流,读数据,并把数据显示在控制台
		InputStream is = s.getInputStream();
		byte[] bys = new byte[1024];
		int len = is.read(bys);
		String data = new String(bys,0,len);
		System.out.println("服务器:"+data);
		
		//给出反馈
		OutputStream os = s.getOutputStream();
		os.write("数据已经收到".getBytes());
		
		//释放资源
		ss.close();
	}
}

Supongo que te gusta

Origin blog.csdn.net/weixin_45573296/article/details/123107569
Recomendado
Clasificación