¡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.
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
- Simple y rapido
- Apoyar la comunicación entre cliente y servidor
- Sin conexión, una vez que el cliente termine de acceder, la conexión con el servidor se desconectará
- Sin estado, el servidor no conservará los datos del cliente.
- En el modo de solicitud y respuesta, el cliente envía una solicitud al servidor y el servidor envía una respuesta al navegador.
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
- Cree un objeto URL y pase la dirección del archivo de red
- Llame a openConnection para abrir la conexión y obtener el objeto HttpURLConnection
- Establecer varias propiedades de la conexión
- Llame a getInputStream para obtener el flujo de entrada
- Crear flujo de salida de archivo
- Leer datos del flujo de entrada de la red y escribir en el flujo de salida del archivo
- 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");
}
}
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