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

Proyecto de base de datos Firebird VB

Proyecto de base de datos Firebird VB

En este proyecto realizaremos una aplicación de base de datos Firebird con el lenguaje de programación de Visual Basic d...

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...

Sourcetrail ahora es Open Source

Sourcetrail ahora es Open Source

Sourcetrail el explorador de código fuente de los lenguaje C, C ++, Java y Python se pasa al Software Libre y desde ahor...

SharedPreferences: Preferencias de Usuario

SharedPreferences: Preferencias de Usuario

En este post construiremos paso a paso un SharedPreferences más conocido en español como «Preferencias de Usuario«, esta...

Dibujar primitivas 2d en html5

Dibujar primitivas 2d en html5

HTML5 junto a javascript permite dibujar figuras llamadas shapes sobre un lienzo que recibe el nombre de «canvas» su uso...

Evitar ejecutar un programa java más de una vez

Evitar ejecutar un programa java más de una vez

Cuando se hace uso de programas a veces no importa que este cree más de una instancia al mismo tiempo, por ejemplo podem...

Comparte lo que sabes

Categorias

Últimas entradas

Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...

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...

Herramientas

Generador de Enlaces a Whatsapp