Tabla de contenido
Primeros conocimientos de programación de redes.
Tres elementos de la programación de redes
IP
- La dirección del dispositivo en la red es un identificador único.
el número de puerto
- El identificador único de la aplicación en el dispositivo.
protocolo
- Reglas para la transmisión de datos en la red. Los protocolos comunes incluyen UDP, TCP, http, https y ftp.
El uso de la interfaz api de la clase InetAddress
Modelo de transmisión de red
- Modelo de referencia OSI: estándar mundial de protocolo de Internet, especificación de comunicación global, un modelo único es demasiado idealista y no se ha promocionado ampliamente en Internet
- Modelo de referencia TCP/IP (o protocolo TCP/IP): el estándar internacional de facto.
Modelo TCP/IP de cuatro capas
protocolo de transporte de red
En las redes informáticas, las reglas de conexión y comunicación se denominan protocolos de comunicación de red.
protocolo UDP
- Protocolo de datagramas de usuario (User Datagram Protocol) UDP es un protocolo de comunicación sin conexión.
- alta velocidad,límite de tamañoEnvíe hasta 64K a la vez, los datos no son seguros y fáciles de perder
Al protocolo UDP no le importa si las partes emisoras y receptoras se han conectado con éxito, solo envía
Protocolo TCP
- Protocolo de control de transmisión TCP (Protocolo de control de transmisión) El protocolo TCP es un protocolo de comunicación orientado a la conexión .
- Velocidad lenta, sin límite de tamaño, seguridad de datos.
El protocolo TCP primero confirmará si el remitente y el receptor están conectados correctamente y luego enviará
UDP
Programa de comunicación UDP
enviar datos
public static void main(String[] args) throws IOException {
//发送数据
//1.创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket();
//2.打包数据
String str = "hello world!";
byte[] bytes = str.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
int port = 10086;//指定发送到哪个端口
DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);
//3.发送数据
ds.send(packet);
//4.释放资源
ds.close();
}
Recibir datos
public static void main(String[] args) throws IOException {
//1.创建DatagramSocket对象
DatagramSocket ds = new DatagramSocket(10086);
//2.接收数据包
byte[] bytes = new byte[1024];//定义接收数据的数组
//定义接收数据的容器
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
ds.receive(packet);//该方法是阻塞的,程序执行到这一步的时候,会在这里死等等发送端发送消息
//3.解析数据包
//就是获取发送时封装的内容
byte[] data = packet.getData();
int len = packet.getLength();
InetAddress address = packet.getAddress();
int port = packet.getPort();
System.out.println("接收该数据"+ new String(data,0,len ));
System.out.println("该数据是从"+address+"这台电脑的"+port+"这个端口发出的");
//4.关闭资源
ds.close();
}
Nota: Primero ejecute el código para recibir datos y luego ejecute el código para enviar datos, de lo contrario, los datos enviados no se pueden recibir
Tres métodos de comunicación de UDP
①Unicast Transmisión de datos uno a uno, correspondencia uno a uno entre
el remitente y el receptor
②Multidifusión El destinatario es un grupo y envía información a un grupo de computadoras
El ejemplo es el siguiente
remitente
Extremo de recepción
③Broadcast Enviar datos a todas las computadoras en la LAN ,
La dirección de transmisión es única para UDP
TCP
Protocolo de comunicación TCP
El protocolo de comunicación TCP es un protocolo de red confiable. Necesita establecer una comunicación de objeto Socket en ambos extremos de la comunicación antesAsegúrese de que la conexión esté establecida
Genere flujos de E/S a través de Socket para la comunicación de red
El siguiente es el código implementado en idea usando TCP para la comunicación
cliente
public static void main(String[] args) throws IOException {
//TCP协议发送数据
//1.创建Socket对象
//细节:在创建对象的同时会连接服务端
// 如果连接不上,代码会报错
Socket socket = new Socket("127.0.0.1",10086);
//2.从连接通道中获取输出流
OutputStream os = socket.getOutputStream();
//写出数据
os.write("hello".getBytes());
//3.释放资源
os.close();
socket.close();
}
Servidor
public static void main(String[] args) throws IOException {
//TCP协议, 接收数据
//1.创建对象ServerSocker
ServerSocket ss = new ServerSocket(10000);
//2.监听客户端的连接
Socket socket = ss.accept();
//3.从连接通道中获取输入流读取数据
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int b;
while ((b = br.read()) != -1){
System.out.print((char) b);
}
//4.释放资源
socket.close();
ss.close();
}
Apretón de manos TCP de tres vías
Asegúrese de que la conexión esté establecida
Las cuatro ondas de TCP
Asegúrese de que la conexión esté desconectada y los datos se procesen, razón por la cual el protocolo TCP es confiable
Esto es para confirmar si el servidor ha procesado los datos y la desconexión se confirmará después del procesamiento.