Filtro CPL Polarizado ventajas

Enviar y recibir mensajes con Sockets en Java - Ejemplo de Servidor y Cliente

Enviar y recibir mensajes con Sockets en Java



En esta entrada veremos un ejemplo de como enviar mensajes de una computadora a otra, en red local, haciendo uso de los Sockets en Java, por tanto tenemos que crear un Servidor y un Cliente para que la comunicación se lleve a cabo.
Hay que tener muy en cuenta que si esperamos respuesta del cliente por parte del servidor, entonces el cliente, tiene que enviar, y si el cliente envía mensaje al cliente el servidor tiene que esperar dicho mensaje. Por tanto la comunicación tiene que estar sincronizada, si uno transmite el otro escucha y si uno escucha el otro transmitirá.

Les comparto el código del Servidor:

//Iván Luis Jiménez
import java.net.*;
import java.io.*;
import java.util.Scanner;

public class servidor{
    static int PUERTO = 5000;
    ServerSocket sc;
    Socket so;
    DataOutputStream salida;
    DataInputStream entrada;
    String mensajeRecibido;

    public void initServidor(){
        
        Scanner teclado = new Scanner(System.in);
        try{
            sc = new ServerSocket(PUERTO);
            so = new Socket();
            
            System.out.println("Esperando conexión...");
            so = sc.accept();
            System.out.println("Se conecto uno...");
            entrada = new DataInputStream(so.getInputStream());
            salida = new DataOutputStream(so.getOutputStream());
            String msn = "";
            while(!msn.equals("x")){
                
                mensajeRecibido = entrada.readUTF();//Leemos respuesta
                System.out.println(mensajeRecibido);
                System.out.println("Escriba un msn para enviar");
                msn = teclado.nextLine();
                salida.writeUTF(""+msn);//enviamos mensaje

            }
            sc.close();
        }catch(Exception e){

        }
    }

    public static void main(String[] args){
        servidor o = new servidor();
        o.initServidor();
    }

}

El código del Cliente:
//Iván Luis Jiménez
import java.net.*;
import java.io.*;
import java.util.Scanner;

public class cliente{
    static String HOST = "localhost";
    static int PUERTO = 5000;
    Socket sc;
    DataOutputStream salida;
    DataInputStream entrada;
    String mensajeRecibido;

    public void initCliente(){
        Scanner teclado = new Scanner(System.in);
        try{
            sc = new Socket(HOST, PUERTO);
            salida = new DataOutputStream(sc.getOutputStream());
            entrada = new DataInputStream(sc.getInputStream());
            String msn = "";
            while(!msn.equals("x")){
                System.out.println("Escriba un msn para enviar");
                msn = teclado.nextLine();
                salida.writeUTF(msn);//enviamos mensaje
                mensajeRecibido = entrada.readUTF();//Leemos respuesta
                System.out.println(mensajeRecibido);
            }
            
            sc.close();
        }catch(Exception e){

        }
    }

    public static void main(String[] args){
        cliente o = new cliente();
        o.initCliente();
    }

}
Unas capturas


 




La comunicación termina hasta que uno de los dos presione "x".

EXTRA:
Para que tu servidor funcione de manera remota o de manera publica, puedes seguir la siguiente liga:
https://ivanovich-hacker.blogspot.com/2019/02/configurar-mi-propio-servidor-web-http.html
La diferencia es, en que en lugar de abrir los puertos  80, 21, tendrás que abrir el puerto que hayas colocado en el código JAVA, que en este caso es el puerto 5000.
También puedes checar este video:

Cualquier duda dejen su comentario en la parte de abajo.
Created By Iván Luis Jiménez

Comentarios

  1. Muy buen aporte amigo, me ayudó. Estoy intentando hacer una comunicacion igual local entre un programa que envíe strigns desde python y recibir en android. Tendras algun material que me pueda servir? muchas gracias!

    ResponderBorrar
  2. una pregunta la clase cliente no hace nada se ejecuta sin errores pero solo salen letras que dicen successful
    espero y puedas ayudarme

    ResponderBorrar
  3. Gracia compa, solo una consulta, en vez de enviar un mensaje string, tambien se puede enviar objetos

    ResponderBorrar
  4. Este comentario ha sido eliminado por el autor.

    ResponderBorrar
  5. Mil gracias, me ha sido muy útil. Usted, señor, es un héroe. :)
    Siento el otro mensaje, que hice misspell en un par de palabras XD

    ResponderBorrar
  6. Muy interesante gracias por compartirlo. Un saludo

    ResponderBorrar
  7. Una pregunta este proyecto es del tema paso de mensajes?

    ResponderBorrar

Publicar un comentario