elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Pasar de C# a Java. Código en modo consola
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pasar de C# a Java. Código en modo consola  (Leído 4,883 veces)
Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Pasar de C# a Java. Código en modo consola
« en: 16 Marzo 2017, 03:13 am »

Hola:

Quiero pasar este código de C# a Java con NetBeans.



Instalar Java actualizado:
https://www.java.com/es/download/

Compilador NetBeans (En español), Java SE:
https://netbeans.org/downloads/index.html

Tutorial sobre instalación del NetBeans y las librerías RxTx para controlar el puerto serie de Arduino:
https://es.slideshare.net/Metaconta2/interfaz-java-y-arduino

Librería oficial RxTx solo para 32 bits:
http://rxtx.qbang.org/wiki/index.php/Download

Librería alternativa RxTx de 32 y de 64 bits. Usaremos 64 bits. (Recomendado):
http://jlog.org/rxtx-win.html

El código de C# es este aquí abajo.
Código
  1. using System;
  2. using System.Text;
  3. using System.IO.Ports;
  4. using System.IO;
  5. using System.Diagnostics;
  6. using System.Threading;
  7.  
  8. namespace Recibir_archivo_desde_Arduino_consola_06
  9. {
  10.    class Program
  11.    {
  12.        static int cantidadBytes;
  13.        static StringBuilder sb = new StringBuilder();
  14.  
  15.        static void Main(string[] args)
  16.        {
  17.            string COM = "";
  18.            // Título de la ventana.
  19.            Console.Title = "Recoger foto desde Arduino y crearlo en el disco duro";
  20.  
  21.            // Tamaño ventana consola.
  22.            Console.WindowWidth = 55; // X. Ancho.
  23.            Console.WindowHeight = 18; // Y. Alto.
  24.  
  25.  
  26.            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
  27.            SerialPort Puerto_serie = new SerialPort();
  28.  
  29.            // Configuración.
  30.            Console.Write(@"
  31. Introduzca un número para seleccionar puerto COM.
  32. Por ejemplo el 4, sería COM4.
  33.  
  34. Puerto: ");
  35.            COM = Console.ReadLine(); // Escribir el número del puerto.
  36.            Console.Clear();
  37.  
  38.            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
  39.  
  40.  
  41.            Puerto_serie.BaudRate = 115200; // Baudios. 115200.
  42.            Puerto_serie.Parity = Parity.None; // Paridad.
  43.            Puerto_serie.DataBits = 8; // Bits de datos.
  44.            Puerto_serie.StopBits = StopBits.One; // Bits de parada.
  45.            Puerto_serie.Handshake = Handshake.None; // Control de flujo.
  46.  
  47.            // Establecer la lectura / escritura de los tiempos de espera.
  48.            Puerto_serie.ReadTimeout = -1; // 500.
  49.            Puerto_serie.WriteTimeout = -1; // 500.
  50.  
  51.            try
  52.            {
  53.                Puerto_serie.Open(); // Abrir el puerto serie.
  54.            }
  55.  
  56.            catch (IOException)
  57.            {
  58.                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
  59.                Console.CursorVisible = false;
  60.                Console.SetCursorPosition(16, 6);
  61.                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
  62.                o no lo encuentra.");
  63.                Console.ReadKey(); // Pulse cualquier tecla para salir.
  64.            }
  65.  
  66.            catch (UnauthorizedAccessException e)
  67.            {
  68.                Console.WriteLine(e);
  69.            }
  70.            Puerto_serie.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
  71.  
  72.            Console.WriteLine("Esperando datos desde Arduino... \n");
  73.            Console.ReadKey();
  74.            Puerto_serie.Close(); // Cerrar puerto.
  75.        }
  76.  
  77.        private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
  78.        {
  79.            try
  80.            {
  81.                SerialPort sp = (SerialPort)sender;
  82.                string indata = sp.ReadExisting();
  83.                string[] data = indata.Split('A');
  84.                cantidadBytes = int.Parse(data[0]);
  85.  
  86.  
  87.                switch (data[1].ToString())
  88.                {
  89.                    case "1":
  90.                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
  91.                        Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: JPG");
  92.                        break;
  93.  
  94.                    case "2":
  95.                        Console.WriteLine("Tamaño: " + cantidadBytes + " Bytes.");
  96.                        Console.WriteLine("Foto: " + data[1] + ". Tipo de archivo: PNG.");
  97.                        break;
  98.  
  99.                    default:
  100.                        Console.WriteLine("Cosas raras en 'data': " + data.ToString()); // Por si hal algún error.
  101.                        break;
  102.                }
  103.  
  104.                int contador = 0;
  105.                byte[] datosArray = new byte[cantidadBytes];
  106.  
  107.                switch (indata)
  108.                {
  109.                    case "17729A1":
  110.                        Thread.Sleep(100); // Retardo.
  111.                        byte[] miBuffer = Encoding.ASCII.GetBytes("OK1"); // Codificación ASCII.
  112.                        sp.Write(miBuffer, 0, miBuffer.Length); // Envía OK1 al puerto serie.
  113.                        break;
  114.  
  115.                    case "2065A2":
  116.                        Thread.Sleep(100); // Retardo.
  117.                        byte[] miBuffer2 = Encoding.ASCII.GetBytes("OK2"); // Codificación ASCII.
  118.                        sp.Write(miBuffer2, 0, miBuffer2.Length); // Envía OK2 al puerto serie.
  119.                        break;
  120.  
  121.                    default:
  122.                        Console.WriteLine("Cosas raras en 'indata': " + indata.ToString()); // Por si hal algún error.
  123.                        break;
  124.                }
  125.  
  126.                while (true)
  127.                {
  128.  
  129.                    contador += sp.Read(datosArray, contador, datosArray.Length - contador);
  130.  
  131.                    Console.SetCursorPosition(10, 6);
  132.                    Console.Write("Datos recibidos:  {0}", contador + " Bytes.");
  133.                    Console.WriteLine("                   ");
  134.  
  135.                    if ((contador == cantidadBytes) && (contador == 17729))
  136.                    {
  137.                        Mensaje1();
  138.                        File.WriteAllBytes("fotón.jpg", datosArray); // Crear archivo en el disco duro.
  139.                        Mensaje2();
  140.                        Process.Start("fotón.jpg"); // Ejecutar visualizador de imágenes.
  141.                        Mensaje3();
  142.                        break; // Garantiza que el ciclo termine.
  143.                    }
  144.  
  145.                    if ((contador == cantidadBytes) && (contador == 2065))
  146.                    {
  147.                        Mensaje1();
  148.                        File.WriteAllBytes("fotón.png", datosArray); // Crear archivo en el disco duro.
  149.                        Mensaje2();
  150.                        Process.Start("fotón.png"); // Ejecutar visualizador de imágenes.
  151.                        Mensaje3();
  152.                        break; // Garantiza que el ciclo termine.
  153.                    }
  154.                }
  155.  
  156.                void Mensaje1()
  157.                {
  158.                    Console.WriteLine();
  159.                    Console.WriteLine("Creando archivo al disco duro...");
  160.                }
  161.  
  162.                void Mensaje2()
  163.                {
  164.                    Console.WriteLine();
  165.                    Console.WriteLine("Archivo creado. Ejecutando imagen.");
  166.                }
  167.  
  168.                void Mensaje3()
  169.                {
  170.                    Console.WriteLine();
  171.                    Console.WriteLine("Imagen ejecutada.");
  172.                    Console.WriteLine();
  173.                    Console.WriteLine("Cabecera recibida: " + indata + "\n");
  174.                    Console.ForegroundColor = ConsoleColor.Yellow; // Letras amarillas.
  175.                    Console.WriteLine("FIN DE PROGRAMA.");
  176.                    Console.ForegroundColor = ConsoleColor.Gray; // Letras grises otra vez.
  177.                }
  178.            }
  179.  
  180.            catch (FormatException)
  181.            {
  182.                // System.FormatException: 'La cadena de entrada no tiene el formato correcto.'
  183.            }
  184.        }
  185.    }
  186. }
  187.  

En estos momentos estoy instalando la librería RxTx de 64 bits para Windwos 10 de 64 bits que es el que uso actualmente. El código de C# arriba fucniona de maravilla.

Esto de Java para adaptarme tardaré una eternidad, al menos se que el Hola mundo es Console.WriteLine("Hola mundo"); de C# es el equivalente a System.out.println("Hola mundo"); de Java.

Cualquier ayuda es bienvenida.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Pasar de C# a Java. Código en modo consola
« Respuesta #1 en: 16 Marzo 2017, 03:52 am »

Cualquier ayuda es bienvenida.

Los convertidores de código de Tangible son muy prácticos a la hora de tratar de convertir un código de "X" lenguaje a un lenguaje que no domines muy bien, en este caso de C# a Java:

Evidéntemente no esperes que el programita te genere un código equivalente en Java perfecto y funcional, pero te servirá para ir empezando y ahorrarte gran parte del esfuerzo, y creo que es mejor opción que esperar a que algún alma caritativa vaya a invertir un buen rato para traducirle un código de 200 lineas a un desconocido.

Es solo una opinión, una opción alternativa que podrías probar.

¡Saludos!


En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Pasar de C# a Java. Código en modo consola
« Respuesta #2 en: 16 Marzo 2017, 04:56 am »

Hola:

No sabía ni me imaginaba un convertidos de C# a Java. He intslado ya las librerías del puerto RxTx, espero que lo haya hecho bien y funcione.

Cada vez que hago un ejemplo en Java, me aparece en NetBeans, esperaba ver un hola mundo como si fuera un CMD de Windows, es decir, la consola negra.

Hay que activarlo en Administrador, Java, en esta opción, activar consola.


Lo que tengo que descubrir.

Voy haber si hay otro convertidos y sino, paso a paso como se traduce. ;)

Saludos.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Consola Java para pasar fotos...
Java
Shad16 0 2,274 Último mensaje 23 Junio 2005, 20:54 pm
por Shad16
Ayuda! pasar mis programas de modo consola a una interface
Programación C/C++
elkiy 4 4,414 Último mensaje 12 Junio 2012, 22:31 pm
por elkiy
Pasar el código de consola a MFC
Programación C/C++
Meta 0 1,657 Último mensaje 4 Febrero 2016, 21:43 pm
por Meta
Pasar este código de VB a Java
Programación General
Baal_30 1 1,869 Último mensaje 17 Marzo 2016, 16:22 pm
por ivancea96
Ayuda para usar código, de Jframe a consola, Java Eclipse
Java
GERATKD 1 3,002 Último mensaje 25 Abril 2023, 18:35 pm
por CronicKraze
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines