Crear un servidor de chat usando Java

Introducción

Las redes son una rama importante de la programación que es vital para conectar a los usuarios a través de dispositivos. Como tales, muchos lenguajes de programación tienen múltiples formas de formar conexiones de usuarios y servidores o entre pares. Para comenzar a programar, Java es uno de los primeros lenguajes que aprenden muchos programadores, y una de las formas interesantes en que java puede manejar las conexiones de red es a través del uso de Java Sockets. He preparado este tutorial para instruir cómo usar sockets en Java desarrollando un servidor de chat entre un servidor y muchos usuarios. Este tutorial está dividido entre el desarrollo del lado del cliente y del lado del servidor.

Requisitos:

  • Java JDK (usé la versión 1.8.0_74 para esto)
  • IDE de Java (usé Eclipse Mars para esto)
  • Una estructura de paquete con las clases anteriores.

Temporizador: alrededor de 15-30 minutos

Habilidad: Esta guía asume que tiene experiencia básica en Java y está familiarizado con los tipos comunes de E / S de Java

Paso 1: configurar un ServerSocket en la clase de servidor

Cree un socket de servidor estático al comienzo de main en la clase ChatServer y ejecútelo con un número de puerto.

SUGERENCIA: ServerSockets puede crearse una instancia con un número de puerto distinto de 4444, pero es probable que el sistema ya esté utilizando números inferiores a 1000.

Paso 2: crear un socket en la clase de inicio de sesión

Cree un socket en el método principal de inicio de sesión, especificando la dirección del host y el número de puerto. Como se trata de una ventana de inicio de sesión, el socket puede ser una variable de instancia, ya que se pasará a la ventana de chat real más tarde.

SUGERENCIA: "localhost" se usa en los parámetros del socket para propósitos de depuración para especificar que el servidor se ejecuta en la misma computadora que el cliente. Más tarde, esto se puede cambiar para tomar una dirección de host para conectarse a un servidor remoto.

Paso 3: crear un bucle para aceptar clientes continuamente

Después de crear instancias de serverSocket en chatServer, inicie un ciclo while que acepte continuamente a todos los clientes.

Paso 4: crear los subprocesos del cliente

  1. Con el socket recibido de serversocket.accept, cree un nuevo ClientThread.
  2. Cree un nuevo subproceso utilizando ClientThread y luego llame a start en el subproceso.
  3. En ClientThread, haga que ClientThread extienda ChatServer e implemente Runnable
  4. Cree el constructor ClientThread y agregue el método ejecutado.

Paso 5: Crear el hilo del servidor

  1. Cree un nuevo ServerThread usando socket.
  2. Cree un nuevo subproceso utilizando el subproceso del servidor y luego llame a inicio en el subproceso.
  3. En ServerThread, haga que ServerThread implemente Runnable
  4. Cree el constructor ServerThread y agregue el método ejecutado.

Paso 6: Hacer que el hilo del cliente envíe y reciba datos

  1. En ClientThread, cree un BufferedReader privado para recibir datos de los clientes y un PrintWriter para escribir en el cliente.
  2. Crear un captador para PrintWriter
  3. Inicialice PrintWriter en ejecución con el flujo de salida del socket y BufferedReader con un nuevo InputStreamReader usando el flujo de entrada del socket
  4. Cree un ciclo while en ejecución que verifique cualquier entrada nueva e imprima la entrada a todos los clientes utilizando la lista de ClientThreads y el captador para PrintWriter

Paso 7: Hacer que el hilo del servidor envíe y reciba datos

  1. En ServerThread, cree un BufferedReader privado para recibir datos del servidor, otro BufferedReader para recibir datos del usuario y un PrintWriter para escribir en el servidor.
  2. Inicialice PrintWriter en ejecución con el flujo de salida del socket, el BufferedReader del servidor con un nuevo InputStreamReader usando el flujo de entrada del socket y el BufferedReader del usuario con un nuevo InputStreamReader usando System.In
  3. Cree un ciclo while en ejecución que verifique cualquier entrada nueva del servidor e imprima la entrada a la consola, y verifique cualquier entrada nueva del usuario e imprima esa entrada al servidor.

Paso 8: pruebe el servidor y agregue funcionalidad opcional

Después de ejecutar el servidor e iniciar clientes, el programa debe transmitir todos los mensajes de cada cliente a todos los demás clientes. Esta fue una pequeña prueba de lo que se puede hacer con los enchufes de Java.

Puede ampliar este proyecto agregando funcionalidades para permitir que el servidor mismo transmita mensajes, archive mensajes, permita que otras formas de entrada y más se familiaricen más con los sockets java y las redes en general.

Artículos Relacionados