¿Está desarrollando JAVA la comunicación en red, principalmente aprendiendo contenido?
Si las computadoras en la red necesitan comunicarse entre sí, a cada computadora se le debe asignar un número de identificación, y las computadoras que reciben y envían datos deben identificarse mediante la identificación número. El "logotipo" en el protocolo TCP/IP es la dirección IP.
Un ordenador puede ejecutar múltiples programas de red al mismo tiempo. El uso de una dirección IP le permite enviar datos a una computadora, 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 red enviado tiene una parte de "puerto", que es un número entero que indica a qué aplicación se entrega la trama de datos para su procesamiento. Al mismo tiempo, debe especificar el número de puerto del programa de red para que diferentes aplicaciones puedan recibir datos en diferentes puertos.
No pueden existir varios programas que utilicen el mismo puerto en el mismo ordenador. El rango de números de puerto es 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 comunes para evitar interferencias entre los programas de red representados por el puerto. números.
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 las aplicaciones se comunican mediante TCP, se establece una conexión virtual entre el origen de los datos y el destino. Una vez establecida la conexión, los datos se pueden intercambiar entre las dos computadoras en forma de un flujo de bytes bidireccional.
UDP es un protocolo de comunicación sin conexión que no garantiza una transmisión confiable de datos, pero puede lograr la función de enviar datos a múltiples objetivos.
3.3 Introducción. (Power) Socket
El socket (socket) es la interfaz y el mecanismo proporcionado por la capa de controlador de red para las aplicaciones. Su función puede considerarse como una base de puerto creada para las aplicaciones.
4. Descripción general 4. Programación de red TCP
Los pasos de operación específicos del protocolo TCP son los siguientes:
(1) El programa del servidor crea un objeto ServerSocket y llama al método aceptar () para esperar la cliente para conectarse.
(2) El programa cliente crea un objeto Socket para establecer una conexión de línea dedicada con el cliente.
(3) El servidor recibe la solicitud de conexión del cliente, crea un nuevo objeto Socket y establece una conexión de línea dedicada con el cliente.
(4) Los dos sockets establecidos en los pasos (2) y (3) pueden hablar en el mismo hilo.
(5) El servidor vuelve a esperar nuevas solicitudes de conexión.
5. Clase ServerSocket
La escritura de programas de servidor de red TCP requiere el uso de la clase ServerSocket para crear el servidor.
Los métodos principales de la clase ServerSocket son los siguientes:
Descripción del tipo de método
El constructor público ServerSocket (puerto int) crea una instancia de ServerSocket.
El método aceptar() del socket público espera a que el cliente se conecte.
El método público inetaddress get inetaddress() devuelve la dirección IP del servidor.
El método público booleano isClosed() devuelve el estado cerrado de ServerSocket.
El método publicovoid close() cierra el socket del servidor.
Cada vez que el servidor se ejecuta, necesita llamar al método aceptar() para esperar a que el cliente se conecte. Después de ejecutar este método, el servidor entrará en un estado de bloqueo hasta que el cliente se conecte nuevamente. El tipo de retorno del método aceptar() es Socket.
6. Clase de socket
El cliente debe crear un objeto de socket para establecer una conexión con el servidor. Cada objeto de socket representa un cliente.
Los métodos comunes de la clase Socket son los siguientes:
Descripción del tipo de método
El constructor público Socket (host de cadena, puerto int) crea un objeto Socket y especifica el nombre de host y el número de producto del servidor al que conectarse.
El método get input stream() del flujo de entrada público devuelve el flujo de entrada del socket.
El método get output stream() del flujo de salida público devuelve el flujo de salida del socket.
El método público booleano isClosed() devuelve el estado cerrado del socket.
El método public void close() cierra este socket.
Nota: La información en la programación de la red TCP se transmite en forma de iostream.
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{
Pública vacía estática (String []a){
ServerSocket server = null
Socket socket = null
BufferedReader in = null
PrintWriter out = null
Pruebe {
//El servidor escucha en el puerto 9000.
servidor = nuevo servidor socket(9000);
//Recibir conexión del cliente
socket = servidor aceptar();
//Obtener la información ingresada por el cliente.
in = new buffered Reader(new InputStreamReader(socket . getinputstream()));
//Envía información al cliente, true actualizará automáticamente el búfer.
out = new PrintWriter(socket. get output stream(), true);
Out.println("Establecer una conexión con el servidor");
string info = in . readline();
System.out.println("La entrada del cliente es: "+info ");
}catch(Exception e){< /p >
e .printstacktrace();
}
Finalmente {
prueba {
en .close() ;
salida .cerrar();
socket .cerrar();
servidor
}catch( Excepción e ){
e . printstacktrace();
}
}
}
}< /p >
Para verificar si el programa del lado del servidor puede funcionar correctamente, el programa también debe proporcionar un programa cliente para comunicarse con el servidor. El programa Telnet en el sistema Windows es el cliente TCP del sistema y puede. se utiliza para probar la comunicación con el servidor. Cuando se ejecuta telnet, especifique la dirección IP y el número de puerto del servidor de conexión. Una vez establecida la conexión, la ventana del programa telnet puede enviar información al servidor y mostrar los datos recibidos del servidor. Los pasos de la prueba son los siguientes:
(1) Ejecute el programa del servidor
(2) Ejecute telnet 127. 0. 0. 1 9000 en la ventana de DOS. y el programa cliente están en la misma máquina, puede usar 127.0.0.1 para representar esta máquina.
Nota: el método aceptar() solo puede aceptar una conexión a la vez. El método debe colocarse en una declaración de bucle para ingresar y generar datos para cada conexión. También debe colocarse en una declaración de bucle para lograr un intercambio continuo entre el servidor y el cliente.
El servicio de clase implementa Runnable{.
Socket socket = null
BufferedReader in = null
PrintWriter out = null
Servicio público (socket socket) { p>
this.socket = socket
}
Public void run(){
//Obtener la información ingresada por el cliente
in = nuevo lector almacenado en búfer(new InputStreamReader(socket . getinputstream. ()));
//Envíe información al cliente; si es verdadero, el búfer se actualizará automáticamente.
out = new PrintWriter(socket. get output stream(), true);
// Bucle para leer datos del cliente y escribir datos en el cliente.
while(true){
Out.println("Establecer una conexión con el servidor");
System.out.println("El cliente dijo :" +en . readline());
}
}
Catch (Excepción e) {
e . printstacktrace( );
}
Finalmente {
prueba {
in close(); cerrar( );
socket . cerrar();
servidor .
}catch(Excepción e){
e . printstacktrace();
}
}
}
}
Clase pública TcpServer{ p>
ServerSocket server = null
Socket socket = null
Prueba {
//El servidor escucha en el puerto 9000.
server = new server socket(9000);
//Recibir múltiples conexiones de clientes
while(true){
socket = servidor. aceptar();
Nuevo hilo (nuevo servicio (socket)). start();
}catch(excepción e){
e . printstacktrace();
}
}
}
8.Programa cliente TCP
Paquete com
Importar Java net *; io *;
Clase pública TcpClient{
Public static void main(String []a){
ServerSocket server = null
Socket socket = null
BufferedReader in = null
BufferedReader in = null
PrintWriter out = null
Prueba { p >
socket = nuevo socket(" 127.0.0.1 ", 9000);
mientras(verdadero){
entrada=nuevo BufferedReader(nuevo InputStreamReader(sistema . en) ) ;
in = nuevo lector almacenado en búfer (new InputStreamReader(socket . getinputstream()));
}
//Enviar información al servidor, si es verdadero. Actualiza automáticamente el búfer.
out = new PrintWriter(socket. get output stream(), true);
Out.println("El cliente dijo: "+input. readline);
string info = in . readline();
System.out.println("El servidor dijo: "+info);
}catch(Exception e){ p>
e.printstacktrace();
}
}
}
9.Programación de red UDP
(1) La clase DatagramSocket se utiliza principalmente para enviar y recibir información.
Métodos principales de la clase DatagramSocket:
Descripción del tipo de método
El constructor público DatagramSocket() construye un objeto DatagramSocket sin especificar un puerto de escucha.
El constructor público DatagramSocket(int port) construye un objeto DatagramSocket para especificar el puerto de escucha.
El método public void send(DatagramPacket p) envía datagramas.
El método público de recepción nula (paquete de datagramas p) recibe datagramas.
(2)Clase DatagramPacket
La clase DatagramPacket se utiliza para empaquetar una información que se enviará o recibirá. Los objetos DatagramPacket deben construirse para enviar y recibir datos.
Métodos principales de la clase DatagramPacket:
Descripción del tipo de método
Constructor público de DatagramPacket (byte [] buf, en longitud) al construir un objeto de paquete de datagrama Especificar memoria espacio y tamaño.
El paquete de datagrama público (byte [] buf, longitud, dirección inetaddress, puerto int) es el mismo que el anterior.
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) En 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
.Público El método estático InetAddress get byname (host de cadena) obtiene el objeto de dirección inet 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 getHostAddress() de cadena pública devuelve una 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) Remitente
Paquete com
Importar Java net * .
Clase pública UdpSend{
Public static void main(String [] a){
DatagramSocket ds = null
DatagramPacket dp = null
byte[]buf = nueva palabra Sección [1024];
Prueba {
//La clase DatagramSocket se utiliza para completar el envío de mensajes.
ds = nuevo datagrama socket();
String info = " hola mundo
DP = nuevo paquete de datagrama (info . getbytes(), info.length , dirección inet. get byname(" localhost "),
//Enviar paquete de datos
ds send(DP); (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.*;
Clase pública UdpRecv{
Public static void main(String) [] a ){
DatagramSocket ds = null
DatagramPacket dp = null
byte[]buf = nuevo byte[1024];
Pruebe {
//La clase DatagramSocket se utiliza para completar el envío de mensajes.
ds = new datagram socket();
dp = new DatagramPacket(buf, 1024
//Recibir datos enviados por el remitente
p>dsreceive(DP);
String str=new String(dp.getData(),0,DP.getlength());
str = str+" from "+DP . obtener dirección . gethostaddress();
sistema . out . println(str);
}catch(Exception e){
e . printstacktrace();
}
Finalmente
{
ds . cerrar el objeto.
}
}
}