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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  ¿Se puede hacer un chat entre dos PC con PowerShell?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Se puede hacer un chat entre dos PC con PowerShell?  (Leído 3,394 veces)
Meta


Desconectado Desconectado

Mensajes: 3.501



Ver Perfil WWW
¿Se puede hacer un chat entre dos PC con PowerShell?
« en: 21 Enero 2023, 11:39 am »

Buenas:

Quiero hacer un buen mini chat para el puerto serie entre dos PC. Como no estoy famirializado, quiero ayuda.

Tengo tres programas que hacen lo mismo en C#, VB .net y C++ .net en modo consola del mini chat y funciona entre ellos.

Al menos dejo el código fuente de C# si alguien lo compara y lo logra hacer. Si quieres otro lenguaje, lo cuentas y lo subo la versión completa.

Código C#:
Código
  1. using System;
  2. using System.IO;
  3. using System.IO.Ports;
  4. using System.Text;
  5. using System.Threading;
  6.  
  7. namespace Chat_Consola_04
  8. {
  9.    class Program
  10.    {
  11.        static bool _continua;
  12.        static SerialPort Puerto_serie;
  13.  
  14.        static void Main(string[] args)
  15.        {
  16.            const int MAXIMA_LONGITUD = 40000;
  17.            string COM = "";
  18.            string nombre;
  19.            string mensaje;
  20.            string titulo = "Mini chat C#";
  21.            string tu = "<Tú>";
  22.  
  23.            StringComparer comparaString = StringComparer.OrdinalIgnoreCase;
  24.            Thread readThread = new Thread(Leer);
  25.  
  26.            #region Configuración ventana.
  27.            // Título de la ventana.
  28.            Console.Title = titulo;
  29.  
  30.            // Tamaño de la ventana, x, y, o ancho y alto.
  31.            const byte ANCHO_X = 70, ALTO_Y = 25;
  32.            Console.SetWindowSize(ANCHO_X, ALTO_Y);
  33.  
  34.            // Color de fondo.
  35.            Console.BackgroundColor = ConsoleColor.Green;
  36.  
  37.            // Color de las letras.
  38.            Console.ForegroundColor = ConsoleColor.Black;
  39.  
  40.            // Limpiar pantalla y dejarlo todo en color de fondo.
  41.            Console.Clear();
  42.  
  43.            // Visible el cursor.
  44.            Console.CursorVisible = true;
  45.            #endregion
  46.  
  47.            #region Configuración puerto serie.
  48.            // Crear un nuevo objeto SerialPort con la configuración predeterminada.
  49.            Puerto_serie = new SerialPort();
  50.  
  51.            // Codificar a UTF-8 para que se vean bien las tildes, ñ y otros caracteres.
  52.            Puerto_serie.Encoding = Encoding.UTF8;
  53.  
  54.            // Obtenga una lista de nombres de puertos serie.
  55.            string[] puertos = SerialPort.GetPortNames();
  56.  
  57.            Console.WriteLine("Se encontraron los siguientes puertos series:");
  58.  
  59.            // Muestre el nombre de cada puerto en la consola.
  60.            foreach (string puerto in puertos)
  61.            {
  62.                Console.WriteLine(puerto);
  63.            }
  64.  
  65.            // Configuración.
  66.            Console.Write(@"
  67. Introduzca un número para seleccionar puerto COM.
  68. Por ejemplo el 4, sería COM4.
  69.  
  70. Puerto: ");
  71.            COM = Console.ReadLine(); // Escribir el número del puerto.
  72.            Console.Clear(); // Limpiar pantalla.
  73.  
  74.            Puerto_serie.PortName = "COM" + COM; // Número del puerto serie.
  75.  
  76.            // Configuración del puerto serie.
  77.            Puerto_serie.BaudRate = 115200;
  78.            Puerto_serie.Parity = Parity.None;
  79.            Puerto_serie.StopBits = StopBits.One;
  80.            Puerto_serie.DataBits = 8;
  81.            Puerto_serie.Handshake = Handshake.None;
  82.            Puerto_serie.RtsEnable = true;
  83.  
  84.            // Establecer los tiempos de espera de lectura / escritura.
  85.            Puerto_serie.ReadTimeout = 500; // 500 Milisegundos.
  86.            Puerto_serie.WriteTimeout = 500; // 500
  87.  
  88.            // Comprueba si puede abrir el puerto serie.
  89.            try
  90.            {
  91.                Puerto_serie.Open(); // Abrir el puerto serie.
  92.            }
  93.  
  94.            // En caso que diera algún error como que no encuentra el puerto seleccionado
  95.            // muestra una excepción.
  96.            catch (IOException)
  97.            {
  98.                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
  99.                Console.CursorVisible = false;
  100.                Console.SetCursorPosition(16, 6);
  101.                Console.WriteLine(@"El puerto " + Puerto_serie.PortName + @" no existe
  102.                o no lo encuentra.");
  103.                Console.ReadKey();   // Pulse cualquier tecla.
  104.                Environment.Exit(1); // Salir de la aplicación.
  105.            }
  106.  
  107.            // Se ha denegado el acceso al puerto.
  108.            catch (UnauthorizedAccessException)
  109.            {
  110.                Console.ForegroundColor = ConsoleColor.Red; // Texto en rojo.
  111.                Console.CursorVisible = false;
  112.                Console.SetCursorPosition(16, 6);
  113.                Console.WriteLine(@"Se ha denegado el acceso al puerto " + Puerto_serie.PortName +
  114.                                "" +
  115.                                "\nPuede estar el puerto escogido en uso.\n" +
  116.                                "Elija un puerto diferente o desactiva el que está en uso.");
  117.                Console.ReadKey();   // Pulse cualquier tecla.
  118.                Environment.Exit(1); // Salir de la aplicación.
  119.            }
  120.            #endregion
  121.  
  122.            _continua = true;
  123.            readThread.Start();
  124.  
  125.            // Mostrar texto Nombre y se
  126.            Console.Write("Nombre: ");
  127.  
  128.            // guarda en la variable nombre.
  129.            nombre = Console.ReadLine();
  130.  
  131.            // Se muestra el nombre o nick y el puerto seleccionado al final del título de la ventana.
  132.            Console.Title = titulo + "- Nick: " + nombre + " - COM: " + COM;
  133.  
  134.            Console.WriteLine("Escriba /salir para salir.");
  135.  
  136.            while (_continua)
  137.            {
  138.                // Cualquier caracter recibido se guarda en la variable mensaje.
  139.                //mensaje = Console.ReadLine();
  140.  
  141.                #region Enviar más de 255 caracteres.
  142.                // #########################################################################
  143.                Stream entradaDeDatos = Console.OpenStandardInput();
  144.                byte[] buffer = new byte[MAXIMA_LONGITUD];
  145.                int numerosBytesLeidos = entradaDeDatos.Read(buffer, 0, MAXIMA_LONGITUD);
  146.                char[] chars = Console.InputEncoding.GetChars(buffer, 0, numerosBytesLeidos);
  147.                mensaje = new string(chars);
  148.                // #########################################################################
  149.                #endregion
  150.  
  151.                // Compara /salir con el mensaje /salir si lo haz escrito igual.
  152.                // ¿Escribiste la palabra /salir?
  153.                if (comparaString.Equals("/salir\r\n", mensaje))
  154.                {
  155.                    // Sí. Entonces, pone esta variable _continue en false.
  156.                    _continua = false;
  157.                }
  158.                // No. Entonces, envía por el puerto serie tu nick
  159.                // y mensaje que haz escrito.
  160.                else
  161.                {
  162.                    Puerto_serie.WriteLine(String.Format("<{0}>: {1}", nombre, mensaje));
  163.                }
  164.            }
  165.  
  166.            // Bloquea el subproceso.
  167.            readThread.Join();
  168.  
  169.            // Cierra el puerto serie.
  170.            Puerto_serie.Close();
  171.        }
  172.  
  173.        // Lee mensaje recibido.
  174.        public static void Leer()
  175.        {
  176.            // Si _continua es true se ejecuta todas las instrucciones dentro de while.
  177.            while (_continua)
  178.            {
  179.                try
  180.                {
  181.                    // Almacena en la variable mensaje cualquier caracter o mensaje recibido.
  182.                    string mensaje = Puerto_serie.ReadLine();
  183.  
  184.                    // Muestra en pantalla mensaje recibido.
  185.                    Console.WriteLine(mensaje);
  186.                }
  187.                catch (TimeoutException) { }
  188.            }
  189.        }
  190.    }
  191. }

Saludos.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines