Red de conocimiento informático - Material del sitio web - Programación cliente servidor JAVA basada en sockets

Programación cliente servidor JAVA basada en sockets

Para completar este trabajo, es necesario completar tres partes del trabajo, que se explican a su vez:

1. Establecer una clase de servidor

Hay una clase especial en Java que se utiliza para establezca un servidor de socket La clase se llama ServerSocket y puede crear un objeto de servidor utilizando el número de puerto que el servidor necesita usar como parámetro.

ServerSocket server = new ServerSocket(9998)

Esta declaración crea un objeto de servidor usando el puerto 9998 y registra el servicio en el puerto 9998. Cabe señalar aquí que la asignación del puerto debe ser El único. Debido a que el puerto debe identificar de forma única el servicio único de cada computadora, y el número de puerto es de 0 a 65535, los primeros 1024 puertos han sido reservados por Tcp/Ip, por lo que solo se pueden asignar a los puertos posteriores al 1024. Cuando un programa cliente establece una conexión de socket en el puerto 9998, el objeto del servidor responde a la conexión y el método server.accept() crea un objeto de socket. Luego, el servidor puede usar el objeto Socket para comunicarse con el cliente.

Socket incoming = server.accept(); // Escuche y espere las conexiones en la ventana

Luego obtenga los flujos de entrada y salida y encapsúlelos

BufferedReader in = new BufferedReader(new

InputStreamReader(incoming.getInputStream()).getInputStream()));

/*

Al leer un archivo, Primero se lee el contenido en el caché y luego se leen los datos del caché cuando se llama a in.readLine() (en lo sucesivo, "método de lectura de bytes de caché").

*/

PrintWriter ut = new PrintWriter(incoming.getOutputStream(), true

Posteriormente, puede utilizar el método in.readLine(); para obtener información del cliente y utilizar el método out.println() para enviar datos al cliente. Sobre esta base, se puede responder a diferentes solicitudes del cliente según las necesidades del programa.

Una vez completada toda la comunicación, debes cerrar ambos flujos. El orden de cierre es cerrar primero el flujo de salida y luego el flujo de entrada, es decir, usar

out.close. ();

p>

in.close();

2. Construyendo código de cliente

En comparación con el servidor, el cliente debería ser más simple. Solo necesita usar la ubicación del servidor. La IP de la máquina puede enviar datos al cliente. El cliente simplemente crea un objeto socket tomando como parámetros la dirección IP de la máquina servidor y el puerto del servidor. Una vez que tenga el objeto, puede utilizar la parte "Build Server" del método "Build Server" para implementar la entrada y salida de datos.

Socket socket = new Socket("168.160.12.42", 9998

O:

Socket socket = new Socket(InetAddress.getLocalHost(), 5678); //Enviar el nombre del host a InetAddress.getLocalHost(), 5678).

InetAddress.getLocalHost() El servidor solicita una conexión

El cliente debe conocer la dirección IP del servidor relevante, para lo cual Java también proporciona una clase relacionada InetAddress. Se debe proporcionar una instancia de este objeto a través de sus métodos estáticos, que proporcionan principalmente métodos para obtener la IP local y obtener la dirección Inet directamente desde su nombre o IP. Sus métodos estáticos proporcionan métodos para obtener la IP local y obtener la dirección Inet directamente desde el nombre o la IP.

in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

out = new PrintWriter(socket.getOutputStream(), true

El código de programa anterior crea un objeto Socket que se conecta al objeto servidor en el host con la dirección IP 168.160.12.42 y el puerto 9998. También crea un flujo de entrada y un flujo de salida, correspondientes a la salida del servidor y la escritura del cliente.

3. Análisis de ejemplo

Servidor:

importar java.io.*;

importar java.net.*; true){

String str=in.readLine(); //// Leer mensajes de datos del cliente

str = serverInput.readLine() // Leer el teclado del usuario. cadena de entrada

System.out .println(str); // Mensaje de datos de salida de la consola del servidor

out.println("ha recibido...."); envía un mensaje al cliente: ha recibido....

out.flush();

if(str.equals("end"))

descanso;

}

Cliente. El objetivo principal de este programa es permitir que el servidor continúe recibiendo información escrita por el cliente hasta que el cliente envíe la cadena "Fin" para salir del programa y el servidor responda con la cadena "Recibir" para decirle al cliente que ha recibió la información.

Código de cliente:

importar java.net.*;

importar java.io.*

Cliente de clase pública{ <; /p>

servidor de socket estático;

public static void main(String[] args) lanza una excepción{

server=new Socket(InetAddress.getLocalHost(), 5678) ; // Solicitud de conexión al servidor desde el nombre de host InetAddress.getLocalHost().

BufferedReader in=new BufferedReader(new InputStreamReader(server.getInputStream())); // El cliente crea el flujo de entrada y lo encapsula

PrintWriter ut=new PrintWriter(server . getOutputStream());

BufferedReader wt=new BufferedReader(new InputStreamReader(System.in)); // El cliente ingresa un nuevo flujo de entrada y lo encapsula