Conceptos básicos de Java 22 Programación de red (HTTP y UDP)

¡Como tú que amas la programación!
Aprenda los cursos prácticos de SpringBoot https://edu.csdn.net/course/detail/31433
Aprenda los cursos de introducción a SpringCloud https://edu.csdn.net/course/detail/31451


Prefacio

La programación de redes también es un buen juego de Java. Este artículo lo lleva a comprender los conceptos relacionados de la red y luego realizar la comunicación de red de HTTP y UDP.

Conceptos relacionados con la red

La programación de red se refiere a la comunicación de datos entre diferentes computadoras en la misma red.

Red de computadoras

La red de computadoras es un sistema de red potente y de gran escala que conecta computadoras distribuidas en diferentes áreas y equipos externos especializados con líneas de comunicación, para que las computadoras puedan transferirse información entre sí y compartir datos, software y otros recursos.

Las redes informáticas se dividen en ubicaciones geográficas:

  • Red de área local
  • Red de área metropolitana
  • Pálido

dirección IP

La dirección IP se refiere a la dirección de Internet (dirección de protocolo de Internet, que es el identificador único entre el dispositivo en red e Internet. En el mismo segmento de red, la dirección IP es la única. La
dirección IP es numérica y es un 32- bit binario. Divídalo en 4 números binarios de 8 bits, cada 8 bits están separados por puntos, cada entero de 8 bits se puede convertir en un entero decimal de 0 a 255, por ejemplo: 202.9.128.88

Clasificación de direcciones IP

  • Categoría A: reservado para estructuras gubernamentales, 1.0.0.1 ~ 126.255.255.254
  • Categoría B: asignado a empresas medianas, 128.0.0.1 ~ 191.255.255.254
  • Categoría C: asignado a cualquier persona que lo necesite, 192.0.0.1 ~ 223.255.255.254
  • Clase D: utilizado para multidifusión, 224.0.0.1 ~ 239.255.255.254
  • Clase E: para experimentos, 240.0.0.1 ~ 255.255.255.254
  • Dirección de recuperación: 127.0.0.1, se refiere a la máquina local, generalmente utilizada para pruebas

Puerto

La dirección IP puede identificar de forma única una entidad de comunicación en la red, pero una entidad de comunicación puede tener múltiples programas de comunicación para proporcionar servicios de red al mismo tiempo, y también se requiere un puerto en este momento.

Tanto el envío como la recepción de datos deben ingresar y salir de la computadora a través del puerto. El número de puerto se usa para identificar de manera única el programa para la comunicación de red en la entidad de comunicación. Dos programas en la misma máquina no pueden ocupar el mismo puerto.

El rango de valores del número de puerto: 0 ~ 65535

Clasificación del puerto:

  • Puerto reconocido: 0 ~ 1023
  • Puerto registrado: 1025 ~ 49151
  • Puerto dinámico o privado: 1024 ~ 65535

Puertos comunes:

  • mysql: 3306
  • oráculo: 1521
  • tomcat: 8080
  • Navegador: 80

carta de acuerdo

El protocolo de comunicación de red
es una colección de reglas que deben observarse al intercambiar información entre entidades pares que se comunican entre sí en una red informática.

La red se divide en 7 capas.
Inserte la descripción de la imagen aquí
Protocolos de comunicación de uso común:

  • Protocolo de la capa de transporte: TCP, UDP, etc.
  • Protocolo de capa de red: IPV4, IPV6, etc.
  • Protocolo de capa de aplicación: HTTP, FTP, SMTP, POP3, etc.

Protocolo HTTP

Hyper Text Transfer Protocol (Protocolo de transferencia de hipertexto) se utiliza para estandarizar la transmisión de datos de texto en la red. Es un protocolo de capa de aplicación, y la capa inferior se basa en el protocolo TCP / IP.

Características del protocolo HTTP

  1. Simple y rapido
  2. Apoyar la comunicación entre cliente y servidor
  3. Sin conexión, una vez que el cliente termine de acceder, la conexión con el servidor se desconectará
  4. Sin estado, el servidor no conservará los datos del cliente.
  5. En el modo de solicitud y respuesta, el cliente envía una solicitud al servidor y el servidor envía una respuesta al navegador.
    Inserte la descripción de la imagen aquí

Método de solicitud HTTP

  • Los datos GET se incluirán en la URL, que no es segura y tiene restricciones en la longitud de los datos, apta para consultas y búsquedas.
  • Los datos POST se envían en segundo plano, lo que es más seguro, no tiene limitación en la longitud de los datos y es adecuado para enviar datos confidenciales.
  • PUT actualizar los recursos del servidor
  • BORRAR solicitud para eliminar un recurso
  • Información del servidor de seguimiento de TRACE
  • OPTIONS permite ver el rendimiento del servidor
  • HEAD se usa para obtener el encabezado
  • CONNECT cambia la conexión a un servidor proxy de tubería

Código de respuesta HTTP

El servidor le dice al navegador el resultado de la respuesta

Código Descripción
Mensajes 1xx La solicitud ha sido recibida por el servidor, continuar procesando
Éxito 2xx La solicitud ha sido recibida, comprendida y aceptada con éxito por el servidor.
Redireccionamiento 3xx Necesita una acción de seguimiento para completar esta solicitud
Error de solicitud 4xx La solicitud contiene un error léxico o no se puede ejecutar
Error del servidor 5xx El servidor encontró un error al procesar una solicitud correcta

Códigos de respuesta comunes:

Código Descripción
200 OK solicitud exitosa
400 La solicitud de solicitud incorrecta tiene un error de sintaxis
401 La solicitud no autorizada no está autorizada
403 El servidor prohibido se niega a brindar el servicio
404 No encontrado El recurso solicitado no existe
500 Error interno del servidor Se produjo un error en el servidor
503 Servidor no disponible El servidor no puede manejar

Conexión de red HTTP

API principal:

  • Dirección de recurso URL
  • Conexión de red HttpURLConnection

El
localizador uniforme de recursos de URL (localizador uniforme de recursos) es un método de representación que se utiliza para especificar la ubicación de la información en Internet.

Método de creación

URL url = new URL("资源的地址");

Método principal

  • URLConnection openConnection () abre una conexión de red

HttpURLConnection

Método principal

método efecto
anular desconexión () Cerrar la conexión
setRequestMethod (método String) Establecer método de solicitud
int getResponseCode () Devolver código de respuesta
void setConnectTimeout (mucho tiempo) Establecer tiempo de espera de conexión
void setRequestProperty (clave de cadena, valor de cadena) Establecer atributos de encabezado de solicitud
InputStream getInputStream () Obtener flujo de entrada
OutputStream getOutputStream () Obtener flujo de salida
void setDoOutput (salida booleana) Establecer si enviar datos
long getContentLength () Obtenga la longitud del recurso

Caso: Descarga imágenes de Internet

  1. Cree un objeto URL y pase la dirección del archivo de red
  2. Llame a openConnection para abrir la conexión y obtener el objeto HttpURLConnection
  3. Establecer varias propiedades de la conexión
  4. Llame a getInputStream para obtener el flujo de entrada
  5. Crear flujo de salida de archivo
  6. Leer datos del flujo de entrada de la red y escribir en el flujo de salida del archivo
  7. Cerrar la conexión
public class DownloadTest {

	/**
	 * 下载文件
	 * @param urlStr  资源的地址
	 * @param savePath 保存的路径
	 */
	public static void download(String urlStr,String savePath){
		try {
			URL url = new URL(urlStr);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setConnectTimeout(3000); //连接超时
			conn.setRequestMethod("GET"); 
			System.out.println("文件长度是:"+conn.getContentLength());
			if(conn.getResponseCode() == HttpURLConnection.HTTP_OK){				
				try(
					InputStream	in = conn.getInputStream();
					OutputStream out = new FileOutputStream(savePath);){
					byte[] buffer = new byte[1024];
					int len = 0;
					while((len = in.read(buffer)) != -1){
						out.write(buffer, 0, len);
					}
					System.out.println("文件下载完毕");
					Runtime.getRuntime().exec("mspaint "+savePath); //用画图打开
				}catch(IOException ex){
					ex.printStackTrace();
				}
			}
			conn.disconnect();
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
	
	public static void main(String[] args) {
		download("http://hbimg.b0.upaiyun.com/a09289289df694cd6157f997ffa017cc44d4ca9e288fb-OehMYA_fw658",
				"D:\\mm.jpg");
	}
	
}

Inserte la descripción de la imagen aquí

Programación UDP

UDP es un protocolo de datagramas, similar a la transmisión. No necesita un protocolo de enlace de tres vías para crear una conexión. La velocidad de transmisión de datos es rápida pero poco confiable

Escenarios de aplicación: voz, chat de video

DatagramSocket

DatagramSocket se puede utilizar como cliente o servidor UDP

Método de creación:

服务器端
new DatagramSocket(端口号)	
客户端
new DatagramSocket()	  

Método principal:

  • enviar (DatagramPacket) enviar paquete de datos
  • recibir (DatagramPacket) recibir paquete de datos

DatagramPacket

DatagramPacket es un paquete de datos UDP, usado para recibir y enviar datos

Método de creación:

用于接收数据的数据包
DatagramPacket(byte[] 数据字节 ,int 数据长度)
用于发送数据的数据包
DatagramPacket(byte[] 数据字节 ,int 数据长度,InetAddress 地址,int 端口)

Métodos comunes:

  • byte [] getData () obtener datos

Comunicación UDP

Use UDP para enviar mensajes simples

Lado del servidor UDP

public class UDPServer {

	public static final int PORT = 8888;
	
	public void start(){
		System.out.println("server started!");
		try {
			//创建UDP服务端
			DatagramSocket server = new DatagramSocket(PORT);
			//创建数据包
			byte[] buf = new byte[1024];
			DatagramPacket packet = new DatagramPacket(buf, buf.length);
			//接收数据包
			server.receive(packet);
			String str = new String(packet.getData());
			System.out.println("收到消息:" + str);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new UDPServer().start();
	}

}

Cliente UDP

public class UDPClient {

	public void sendMsg(String ip,int port,String msg){
		try {
			//创建UDP客户端
			DatagramSocket client = new DatagramSocket();
			//创建数据包
			byte[] buf = msg.getBytes();
			DatagramPacket packet = new DatagramPacket(buf,buf.length,InetAddress.getByName(ip),port);
			//发送数据包
			client.send(packet);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new UDPClient().sendMsg("127.0.0.1", 8888, "Hello UDP!");
	}
}

Fin


Si necesita aprender otros conocimientos de Java, haga clic aquí Conocimiento ultra detallado de Java Resumen

Supongo que te gusta

Origin blog.csdn.net/u013343114/article/details/112798898
Recomendado
Clasificación