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

Desarrollo de juegos con Libgdx y Android Studio

Desarrollo de juegos con Libgdx y Android Studio

De las pocas herramientas disponibles entre librerías, frameworks, engines, etc para el desarrollo de videojuegos en len...

Escalar imagen en java

Escalar imagen en java

Esta aplicacion permite escalar una imagen desde java sin perder las proporciones de la misma, utiliza SCALE_AREA_AVERAG...

Crea tu propia aplicacion para realizar llamadas

Crea tu propia aplicacion para realizar llamadas

En este tutorial Android Bolivia 🙂 construiremos una sencilla aplicación para realizar llamadas por teléfono, aprenderem...

Migrar proyecto Netbeans a Eclipse

Migrar proyecto Netbeans a Eclipse

En ocasiones por motivos cualesquiera que sea queremos pasar proyectos hechos en netbeans a Eclipse, Netbeans cuenta con...

Tradukisto: Conversión de dinero en palabras

Tradukisto: Conversión de dinero en palabras

Tradukisto es una biblioteca para Java 8 creada para convertir números enteros o cantidades de dinero a sus equivalentes...

JavaFX y ApiRest – GET

JavaFX y ApiRest – GET

En este tutorial construiremos una aplicación en JavaFX para leer datos de un servicio web Herramientas IDE Netbeans 8.x...

Comparte lo que sabes

Categorias

Últimas entradas

Los archivos digitales (txt, docx, xlsx, odt, odp, pdf, etc) nos permiten almacenar información el cual en ocasiones, de...

En este post crearemos un botón swing que reproducirá un sonido cuando este sea presionado por el usuario.  Sin mas que...

Muchas veces necesitamos de fotos para adornar nuestros perfiles en RRSS pero no queremos subir nuestras propias fotos p...

En esta ocasión aprenderemos a conectaros con una base de datos Oracle desde Laravel. Es un tutorial sencillo y cortito,...

Herramientas

Generador de Enlaces a Whatsapp