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

 

 


Tema destacado: AIO elhacker.NET 2021 Compilación herramientas análisis y desinfección malware


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  ERROR: Referencia a objeto no establecida como instancia de un objeto.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ERROR: Referencia a objeto no establecida como instancia de un objeto.  (Leído 7,254 veces)
Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
ERROR: Referencia a objeto no establecida como instancia de un objeto.
« en: 6 Diciembre 2023, 22:37 pm »

Hola:

En este código me sale un error y no se como corregirlo, ya que me interesa mostrar datos en pantalla y no me sale.

Ver error.

Código hecho hasta ahora.
Código
  1. using System;
  2. using System.IO.Ports;
  3.  
  4. namespace Almacenar_byte_puerto_serie_Consola_01
  5. {
  6.    internal class Program
  7.    {
  8.        static SerialPort puertoSerie;
  9.        static byte[] datoRecibido;
  10.        static void Main(string[] args)
  11.        {
  12.            #region Configuración ventana.
  13.            // Título de la ventana.
  14.            Console.Title = "Almacenar byte[] desde el puerto serie.";
  15.  
  16.            // Tamaño de la ventana, x, y, o ancho y alto.
  17.            const byte ANCHO_X = 70, ALTO_Y = 25;
  18.            Console.SetWindowSize(ANCHO_X, ALTO_Y);
  19.  
  20.            // Color de fondo.
  21.            Console.BackgroundColor = ConsoleColor.Black;
  22.  
  23.            // Color de las letras.
  24.            Console.ForegroundColor = ConsoleColor.Yellow;
  25.  
  26.            // Limpiar pantalla y dejarlo todo en color de fondo.
  27.            Console.Clear();
  28.  
  29.            // Visible el cursor.
  30.            Console.CursorVisible = true;
  31.            #endregion
  32.  
  33.            puertoSerie = new SerialPort()
  34.            {
  35.                // Configuración del puerto serie.
  36.                PortName = "COM4",           // Nombre del puerto serie.
  37.                BaudRate = 2400,             // Velocidad en baudios.
  38.                Parity = Parity.None,        // Esquema para comprobar la paridad de cada byte recibido.
  39.                StopBits = StopBits.One,     // Número de bits de parada por byte.
  40.                DataBits = 8,                // Número de bits de datos por byte.
  41.                Handshake = Handshake.None,  // Protocolo de establecimiento.
  42.                DtrEnable = true,            // Línea de terminal de datos.
  43.                RtsEnable = true,            // Línea de solicitud.
  44.  
  45.                // Establecer los tiempos de espera de lectura / escritura.
  46.                ReadTimeout = 500,           // Tiempo de espera de escritura en ms.
  47.                WriteTimeout = 500,          // Tiempo de espera de escritura en ms.
  48.  
  49.                // Más configuraciones.
  50.                DiscardNull = false,         // Descartar bytes nulos recibidos.
  51.                ParityReplace = 63,          // Reemplaza los bytes recibidos con errores de paridad.
  52.                ReadBufferSize = 4096,       // Tamaño del búfer de lectura en bytes.
  53.                WriteBufferSize = 2018,      // Tamaño del búfer de escritura en bytes.
  54.                ReceivedBytesThreshold = 1   // Número de bytes que se necesitan.
  55.            };
  56.  
  57.            puertoSerie.DataReceived += SerialPort_DataReceived;
  58.            puertoSerie.Open();
  59.  
  60.            Console.WriteLine("Presiona cualquier tecla para detener la captura...");
  61.            Console.ReadKey();
  62.  
  63.            puertoSerie.Close();
  64.  
  65.            Console.WriteLine("Datos recibidos:");
  66.            MostrarBytes(datoRecibido);
  67.        }
  68.        static void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
  69.        {
  70.            SerialPort sp = (SerialPort)sender;
  71.            int bytesToRead = sp.BytesToRead;
  72.            byte[] buffer = new byte[bytesToRead];
  73.            sp.Read(buffer, 0, bytesToRead);
  74.  
  75.            if (datoRecibido == null)
  76.            {
  77.                datoRecibido = buffer;
  78.            }
  79.            else
  80.            {
  81.                Array.Resize(ref datoRecibido, datoRecibido.Length + bytesToRead);
  82.                Array.Copy(buffer, 0, datoRecibido, datoRecibido.Length - bytesToRead, bytesToRead);
  83.            }
  84.        }
  85.  
  86.        static void MostrarBytes(byte[] dato)
  87.        {
  88.            for (int i = 0; i < dato.Length; i++)
  89.            {
  90.                Console.Write($"{dato[i]} ");
  91.            }
  92.            Console.WriteLine();
  93.        }
  94.    }
  95. }

Se trata de obtener bytes puro y duro desde el RS232 o puerto serie, almacenarlo en un array tipo byte[] y mostrarlo en pantalla.

¿Alguna idea?

Saludos.


En línea

**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #1 en: 6 Diciembre 2023, 23:53 pm »

No se si te equivocaste al publicar la imagen del error, por que en el titulo dices un error pero en la imagen sale otro.

referente al error del la imagen, se ve que tienes un array llamado "numeros" y tienes 6 items (del 0 al 5, siendo el index 5 el maximo de ese array) , pero tu estas consultando un index : "6" el cual no existe en ese array.

Puedes solucionarlo de la siguiente manera:

1) Revisar si tal index existe en ese array y si no existe (es tu caso) , no mostrarlo en el richtexbox.

por cierto note que estas dentro de un Foreach y incrementas la variable "contador", osea que si la variable contador se incrementa a 10 por ejemplo, y tu array "numeros" tiene solo 5 items (del 0 al 4 en index), tendras puros errores. por que ese index no existe en tu array.


Esto es referente a lo mostrado en la imagen que subiste.





En línea



Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #2 en: 7 Diciembre 2023, 23:37 pm »

Me equivoqué. La captura es esta:



Ver zoom.

Disculpen.
En línea

soyloqbuskas

Desconectado Desconectado

Mensajes: 218


¡El conocimiento es de todos!


Ver Perfil
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #3 en: 9 Diciembre 2023, 04:25 am »

Buenas.

Creo que el problema esta en que el objeto dato no existe porque en el codigo lo has llamado datoRecibido. Reemplaza dato.length por datosRecibidos.length.

Un saludo.
En línea

"Si tienes 1 manzana y yo tengo otra manzana...
y las intercambiamos, ambos seguiremos teniendo 1 manzana.
Pero...si tu tienes 1 idea y yo tengo otra idea...
y las intercambiamos, ambos tendremos 2 ideas."


George Bernard Shaw
**Aincrad**


Desconectado Desconectado

Mensajes: 668



Ver Perfil WWW
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #4 en: 9 Diciembre 2023, 17:05 pm »

Me equivoqué. La captura es esta:



Ver zoom.

Disculpen.

eso es por que el array de byte "dato" esta vacio, osea error no lo tienes en esa funcion "MostrarBytes" , el error lo tienes en lo que esta llamando a esa funcion, osea basicamente estas llamando esa funcion pero con un array vacio.

puedes solucionarlo de dos maneras :

1) ver por que le estas mandando un array vacio , en tu codigo. osea hay en dato recibido, no recibe nada y la variable queda vacia :



2) verifica si el array esta vacio , por ejemplo, Agrega esto a la funcion MostrarBytes:

Código
  1. If (dato == null) { return; }

« Última modificación: 9 Diciembre 2023, 17:08 pm por **Aincrad** » En línea



Danielㅤ


Desconectado Desconectado

Mensajes: 1.681


🔵🔵🔵🔵🔵🔵🔵


Ver Perfil
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #5 en: 9 Diciembre 2023, 19:20 pm »

Hola, a tener en cuenta es que cuando se necesita saber si una variable tiene el valor vacío, hay dos formas de comprobarlo que no son iguales, aqui un ejemplo:

Código
  1. If (dato == null) { return null; }

Código
  1. If (dato == "") { return ""; }

La primera comprobación devuelve null siendo una variable sin contenido y del tipo null mientras que la segunda es una variable también sin contenido/datos pero es del tipo string, aunque las dos son variables vacías pero de distintos tipos.


Saludos
En línea

Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #6 en: 13 Diciembre 2023, 21:48 pm »

Me ejecuta pero en pantalla no me muestra nada a la hora de enviar tramas de bytes para ver si lo capta. Si no hay nada, que también indique algo para saberlo.
En línea

Serapis
Colaborador
***
Desconectado Desconectado

Mensajes: 3.355


Ver Perfil
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #7 en: 23 Diciembre 2023, 22:51 pm »

Creo que el problema esta en que el objeto dato no existe porque en el codigo lo has llamado datoRecibido. Reemplaza dato.length por datosRecibidos.length.
Esa es una posibilidad... lo que puede haber sucedido es que cambiaste el nombre al array antes de crear ese bucle y luego al teclear escribiste el nombre que tenía previamente el array.

 la otra posibilidad es que 'dato', sea un array que se reciba por referencia,  y por tanto es un array que debe crear y rellenar la función llamada, y que en ese caso no parece ser así.  Revisa la función llamada. Si cabe la posibilidad de que la función pueda entregar el array nulo, usa un buleano en la devolución de la función, para omitir el bucle, cuando devuelva false...
En línea

Meta


Desconectado Desconectado

Mensajes: 3.439



Ver Perfil WWW
Re: ERROR: Referencia a objeto no establecida como instancia de un objeto.
« Respuesta #8 en: 25 Diciembre 2023, 08:17 am »

La idea del programa es almacenar los bytes recibidos y mostrarlo en pantalla.

Si no ha llegado nada, que diga que no hay nada con un mensaje.
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