Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Proyectos / Cliente/Servidor en java y c#

Cliente/Servidor en java y c#

Autor jc mouse miércoles, agosto 31, 2016

Como habíamos mencionado en un anterior post Ejemplo socket java Cliente/Servidor , el lenguaje de programación entre el Cliente y el Servidor no tienen porque ser el mismo. Y para dejar ejemplificado este punto, en esta ocasión, trabajaremos con dos de las tecnologías más usadas en la actualidad como son Java y C# de .NET

Nuestro sistema Cliente/Servidor consistirá en la resolución de expresiones matemáticas, es decir; el cliente enviara una petición de la forma:

Cliente> 1+1

y el servidor resolverá esa expresión, si es que puede resolverla y retornara el resultado al cliente

Servidor> 1+1 = 2

Sin más vamos al proyecto.

Necesitamos

  • IDE Netbeans 8.x
  • Visual Studio 2015
  • Conocimientos de lenguaje Java y C#

Nivel: Intermedio

Tiempo: 30 minutos

EL SERVIDOR

El servidor estará programado en C#

Paso 1. El Proyecto

Crea un proyecto de consola con nombre «ServidorNET» como se ve en la imagen siguiente

server tcp

Paso 2. Codigo

Reemplaza el contenido del archivo Program.cs por el siguiente:

using System;
using System.Data;
using System.Net;
using System.Net.Sockets;

namespace ServidorNET
{
    class Program
    {
        static void Main(string[] args)
        {
            //puerto 
            int PORT = 5000;
            //IP Localhost
            IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[1];//127.0.0.1
            Console.WriteLine("Server> " + ipAddress);            
            Console.WriteLine("Server> running");            
            while (true) {
                //para la comunicacion de red
                //Inicializa una nueva instancia con la familia de direcciones, tipo de socket y protocolo de la clase.
                Socket socket = new Socket(AddressFamily.InterNetwork,//Dirección para IP versión 4
                                           SocketType.Stream, //Admite secuencias de bytes bidireccionales, usa el protocolo TCP 
                                           ProtocolType.Tcp);//Protocolo de Control de Transmisión.                
                //Contiene información de puerto local o remoto y host que necesita una aplicación 
                //para conectarse a un servicio en un host. La clase IPEndPoint forma un punto de conexión a un servicio
                IPEndPoint myAdress = new IPEndPoint(ipAddress, PORT); 
                try
                {
                    socket.Bind(myAdress);//Asocia un Socket con un extremo local
                    socket.Listen(1);//colocal el socket en estado de escucha. 1: numero de conexiones entrantes
                    Console.WriteLine("Server> listening...");
                    //Crea un nuevo Socket para una conexión recién creada.
                    Socket socketClient = socket.Accept();
                    //tamaño del búfer 
                    byte[] bytes = new byte[256];
                    //recibe datos y devuelve el número de bytes leídos correctamente
                    int count = socketClient.Receive(bytes);
                    //decodifica bytes a nueva cadena string
                    string data = System.Text.Encoding.ASCII.GetString(bytes, 0, count);
                    //muestra en pantalla
                    Console.WriteLine("Server> received: {0}", data);
                    //se evalua expresion matematica
                    String result = Evaluate(data);
                    Console.WriteLine("Server> {0} = {1} ", data, result);
                    //retorna resultado al cliente
                    byte[] toClient = System.Text.Encoding.ASCII.GetBytes(result);
                    socketClient.Send(toClient);//Envía datos al cliente
                    socketClient.Shutdown(SocketShutdown.Both); //Deshabilita los envíos y recepciones en un Socket
                    socket.Close();//Cierra el Socket conexión y libera todos los asociados los recursos.
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Server> {0}", ex.ToString());
                    Console.WriteLine("Press any ket to finish");
                    Console.ReadLine();
                    Environment.Exit(0);
                }                
            }//end while
        }

        /// <summary>
        /// Metodo para evaluar una expresion matematica
        /// <param name="expression">expresion matematica de la forma Ej.: (2+3)-4</param>                
        /// <returns>String : Resultado de la expresión matematica</returns>
        /// </summary>
        public static String Evaluate(string expression)
        {
            try {
                DataTable table = new DataTable();
                table.Columns.Add("expression", typeof(string), expression);
                DataRow row = table.NewRow();
                table.Rows.Add(row);
                return (string)row["expression"];
            }
            catch (EvaluateException ex) {                
                Console.WriteLine("Server> {0}", ex.ToString());
            }
            return "No se puede evaluar expresion";
        }

    }
}

El código se encuentra comentado linea a linea, pero es necesario aclarar algunos puntos:

Tenemos la siguiente linea de código para obtener la IP del servidor local «localhost» la cual es «127.0.0.1»

IPAddress ipAddress = Dns.GetHostEntry("localhost").AddressList[1];//127.0.0.1

El contenido del array es:

  • AddressList[0]  ::1 Dirección IPv6 para localhost
  • AddressList[1]   127.0.0.1  Dirección IPv4 para el localhost

Esta variable «ipAddress» lo usamos para la conexión en:

IPEndPoint myAdress = new IPEndPoint(ipAddress, PORT); 

pero también podríamos usar:

IPEndPoint myAdress = new IPEndPoint(IPAddress.Any, PORT);

Lo que hace IPAddress.Any es proporcionar una dirección IP que indica el servidor que debe escuchar la actividad del cliente en todas las interfaces de red.

EL CLIENTE

El Cliente estara programado en Java

Paso 1. El Proyecto

Crea un nuevo proyecto en Netbeans que se llamara «ClienteJava» el cual contara con una sola clase llamada MainCliente.

java net

Paso 2. El Código

El cliente con código más corto que el servidor, es el siguiente:

package cliente;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
/**
 * @see https://www.jc-mouse.net/
 * @author mouse
 */
public class MainCliente {

    private final static int PORT = 5000;
    private final static String SERVER = "localhost";
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {                
        //
          
        Socket clientSocket;//Socket para la comunicacion cliente servidor                        
        try{
            System.out.println("Client> started");
            while( true ){//ciclo repetitivo     
                //abre socket   
                clientSocket = new Socket(SERVER,PORT);               
                //Para leer lo que escriba el usuario                       
                BufferedReader brRequest = new BufferedReader(new InputStreamReader(System.in));
                //para imprimir datos del servidor
                PrintStream toServer = new PrintStream(clientSocket.getOutputStream());
                //Para leer lo que envie el servidor      
                InputStream stream = clientSocket.getInputStream();            
                //mensaje para el cliente
                System.out.println("Client> Introduzca expresión matematica ");
                //captura comando escrito por el usuario
                String request = brRequest.readLine();    
                //manda al servidor
                toServer.println(request); 
                //lee respuesta del servidor
                byte[] bytes = new byte[256];
                stream.read(bytes,0,256);
                //convierte a string
                String received = new String(bytes,"UTF-8");           
                //imprime en pantalla
                System.out.println("Server> " + request + " = " + received.trim());
                
            }            
        }catch(IOException | NumberFormatException ex){            
            System.out.println(ex.getMessage());
        }
    }
    
}

Si no tenemos ningún error, ejecutamos el servidor primero y después el cliente, y ya podremos probar el sistema.

servidor net c sharp

java cliente socket

En el siguiente vídeo puedes ver el sistema en acción

enjoy!!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Tutorial HeidiSQL: Sesion, Base de datos y Tablas

Tutorial HeidiSQL: Sesion, Base de datos y Tablas

HeidiSQL es un software libre y de código abierto que permite conectarse a servidores MySQL, MariaDB, Percona Server, Mi...

Crear Miniaturas Thumbnails de Videos (Código Fuente)

Crear Miniaturas Thumbnails de Videos (Código Fuente)

VLC Media Player es un reproductor multimedia de código abierto muy popular desarrollado por el proyecto VideoLAN. VLCJ ...

Que es y como se crea una Imagen Forense

Que es y como se crea una Imagen Forense

¿Que es y para que sirve una imagen forense? Una imagen forense es un «clon» (copia bit a bit) de algún dispositivo como...

TextView Autocompletado

TextView Autocompletado

Un TextView autocompletado nos facilita el ingreso de información en aplicaciones móviles ya que te muestra posibles opc...

Crear ayuda HTML para programa con JavaFX Swing

Crear ayuda HTML para programa con JavaFX Swing

En este post veremos como crear una aplicación de ayuda al usuario similar al extinto javahelp. Pero en esta oportunidad...

Bloquear pantalla cliente

Bloquear pantalla cliente

En este tutorial crearemos una aplicación que bloqueara toda la pantalla de la PC y no nos dejara realizar ninguna tarea...

Comparte lo que sabes

Categorias

Últimas entradas

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...

Herramientas

Generador de Enlaces a Whatsapp