• Domingo 22 de Diciembre de 2024, 09:10

Autor Tema:  Manejo de Socket Buffer (byte[])  (Leído 837 veces)

loruMan

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Manejo de Socket Buffer (byte[])
« en: Sábado 17 de Abril de 2010, 23:07 »
0
Hola que tal. Se me ha presentado un problema intentando adaptar una aplicacion de tipo servidor (C#) a un cliente ya hecho en C++.

Les paso a explicar en que consiste el envio de datos desde el cliente:

Código: C++
  1. char cData[1024];
  2. DWORD *dwp;
  3. WORD *wp;
  4.  
  5. ZeroMemory(cData, sizeof(cData));
  6.  
  7. dwp = (DWORD *)cData;
  8. *dwp = 0x0442; // Seria el Identificado del mensaje
  9.  
  10. wp = (WORD *)(cData + 4);
  11. *wp = 0x002; // Seria el tipo de mensaje
  12.  
  13. // Demas datos del buffer a mandar
  14.  

Yo desde mi aplicacion servidor estoy intentando corroborar estos datos. He probado varias maneras, ya sea utilizando metodos de copia de la clase Array y ninguna me ha resultado, por lo que comence a utilizar codigo no seguro.

Este codigo se refiere ya a la decodificacion del Buffer del socket, ya que los datos los recibo sin problema. Esto es lo ultimo que intente:

Código: C#
  1. byte[] m_Buffer; // Atributo de clase que contiene los bytes recibidos del cliente
  2.  
  3. uint m_ID; // Atributo de clase que contiene el Identificador
  4.  
  5. ushort m_Type; // Atributo de clase que contiene el tipo
  6.  
  7. public unsafe void DecodeMainAttr()
  8. {
  9.   if (m_Buffer == null) return;
  10.  
  11.   fixed (byte *pBuffer = this.m_Buffer)
  12.   {   
  13.     this.m_ID = *((uint *)pBuffer);  
  14.     this.m_Type = (*((ushort *)pBuffer + sizeof(uint));  // + 4
  15.   }
  16. }
  17.  

El resultado de los datos en los 2 atributos son cualquier numero.
Espero una solucion a esto, gracias..