Java Ejemplo - Programa de servidor multihilo implementado con Socket
En Java, se puede implementar un programa de servidor multihilo utilizandoServerSocketpara escuchar las conexiones de los clientes. Cada vez que hay una nueva conexión de cliente, se inicia un nuevo hilo para manejar esa conexión. A continuación se muestra un código de ejemplo que demuestra cómo usar Java Socket para implementar un programa de servidor multihilo.
Código del lado del servidor
Primero, creamos un programa del lado del servidor que escucha en un puerto especificado e inicia un nuevo hilo para cada conexión de cliente para manejar la comunicación.
Archivo MultiThreadedServer.java
Código del cliente
El código del cliente se utiliza para conectarse al servidor y enviar mensajes. Se pueden crear múltiples clientes para probar la capacidad de procesamiento multihilo del servidor.
Código del archivo Client.java:
import java.net.*;
public class Client {
public static void main(String[] args) {
String serverAddress = "localhost";
int port = 12345; // Puerto del servidor
try (Socket socket = new Socket(serverAddress, port)) {
System.out.println("Conectado al servidor");
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = consoleReader.readLine()) != null) {
writer.println(userInput);
String serverResponse = reader.readLine();
System.out.println("Respuesta del servidor: " + serverResponse);
}
} catch (UnknownHostException e) {
System.err.println("Host desconocido: " + serverAddress);
e.printStackTrace();
} catch (IOException e) {
System.err.println("No se pudo obtener la conexión de E/S a: " + serverAddress);
e.printStackTrace();
}
}
}
Pasos para ejecutar
-
Ejecutar el servidor:
- Compilar y ejecutar
MultiThreadedServerla clase. - El servidor se iniciará y escuchará las conexiones de clientes en el puerto especificado.
- Compilar y ejecutar
-
Ejecutar el cliente:
- Compilar y ejecutar varias
Clientinstancias de la clase para simular múltiples clientes conectándose al servidor. - En la consola del cliente, ingrese un mensaje; el cliente enviará el mensaje al servidor y el servidor responderá con el mismo mensaje.
- Compilar y ejecutar varias
Explicación
ServerSocket: El socket utilizado en el lado del servidor para escuchar las conexiones de los clientes.Socket: El canal de comunicación entre el cliente y el servidor.ClientHandler: La clase de hilo que maneja cada conexión de cliente.BufferedReaderyPrintWriter: Se utiliza para leer y escribir flujos de datos.
Esta implementación asegura que el servidor pueda manejar múltiples conexiones de clientes simultáneamente, sin que las operaciones de larga duración de un cliente bloqueen las solicitudes de otros clientes.
Compilar el código
Abra una terminal o símbolo del sistema, cambie al directorio donde están guardados los archivos Java anteriores y compile el código:
javac MultiThreadedServer.java Client.java
Después de la compilación, ejecute primero el programa del servidor; el servidor se iniciará y comenzará a escuchar en el puerto 12345.
java MultiThreadedServer
Verá la salida del servidor:
El servidor se ha iniciado, esperando la conexión del cliente...
Abra otra ventana de terminal o símbolo del sistema y ejecute el programa del cliente. Puede ejecutar varias instancias del cliente para probar el procesamiento multihilo.
java Client
Verá la salida del cliente:
Conectado al servidor
Luego, puede ingresar un mensaje en la consola del cliente, por ejemplo:
Hello Server
El servidor responderá:
服务器回应: Hello Server
La salida del lado del servidor mostrará:
客户端已连接: 127.0.0.1 收到客户端消息: Hello ServerOtras extensiones