none
Ayuda procesando binario RRS feed

  • Pregunta

  • Hola amigos tengo una DUDA, estoy trabajando en un proyecto en el que uso una webApi que me envia request
    a un webserver que hice para procesar los mensajes de la api. En la consola del programa que tiene la api, cada
    ves que envia un mensaje pone el siguiente mensaje:

    2019/08/02 08:45:32 - DEBUG : Called API callback : Message (2002 ms)
    2019/08/02 08:45:41 - DEBUG : Calling API callback : Message (http://127.0.0.1:8585)
    2019/08/02 08:45:41 - TRACE : API callback parameters :
    2019/08/02 08:45:41 - TRACE : 00000000 | a6 0f 00 80 00 00 00 00  08 bf 1a 12 1b 0a 0c 08 | ................
    2019/08/02 08:45:41 - TRACE : 00000010 | 01 10 9f cb b3 95 9f 80  80 88 01 11 7c d2 41 5d | ............|.A]
    2019/08/02 08:45:41 - TRACE : 00000020 | 00 00 00 00 18 01 20 01  12 19 0a 0c 08 01 10 9f | ...... .........
    2019/08/02 08:45:41 - TRACE : 00000030 | cb b3 95 9f 80 80 88 01  11 00 00 00 00 00 00 00 | ................
    2019/08/02 08:45:41 - TRACE : 00000040 | 00 20 01 18 68 20 00 30  05 38 01                | . ..h .0.8.

    se supone que los primeros 4 bits del binario es el tipo de mensaje, los siguientes 4 bits el lenght y el resto un mensage en protobuf.
    Para obtener el binario lo hago

            private byte[] getBody(HttpListenerRequest request)
            {
                byte[] result;
                byte[] buffer = new byte[4096];
                int count = 0;

                using (Stream inputStream = request.InputStream)
                {
                    using (BinaryReader streamReader = new BinaryReader(inputStream))
                    {
                        using (MemoryStream memoryStream = new MemoryStream())
                        {
                            do
                            {
                                count = streamReader.Read(buffer, 0, buffer.Length);
                                memoryStream.Write(buffer, 0, count);
                            }
                            while (count != 0);
                            {
                                result = memoryStream.ToArray();
                            };
                        }
                    }
                }
                return result;
            }

    cuando voy a obtener el string de los primeros 4 bits uso
    string messagetype = BitConverter.ToString(getBody(request), 0, 4);
    pero el resultado es a6-0f-00-80
    No entiendo bien como procesar ese mensaje. Si me pudieran poner un ejemplo de como procesar ese binario
    obteniendo lo que me envian me sería de mucha ayuda. De antemano Gracias.

    viernes, 16 de agosto de 2019 17:38