Mede programmers,
Ik kom uit de C/C++ wereld en was nu even bezig om een analyse applicatie te maken in C#, waar ik om de haverklap tegen typische C# starters problemen aanloop. Uit het volgende probleem kom ik helaas niet uit dus hopelijk met wat support van jullie kant....
Er is data ontvangen via UDP en deze staat in een byte[] keurig te wachten voor analyse.
Deze data (verzonden door PABX [telefooncentrale]) bestaat uit een vaste header met daarna variabele lengte aan analysedata. Mijn vraag is: hoe map ik het eerste blok van bytes op deze struct?
In code (snippets uit mijn applicatie):
Vanaf regel 30 is mijn probleem neergezet.
Ik kom uit de C/C++ wereld en was nu even bezig om een analyse applicatie te maken in C#, waar ik om de haverklap tegen typische C# starters problemen aanloop. Uit het volgende probleem kom ik helaas niet uit dus hopelijk met wat support van jullie kant....
Er is data ontvangen via UDP en deze staat in een byte[] keurig te wachten voor analyse.
Deze data (verzonden door PABX [telefooncentrale]) bestaat uit een vaste header met daarna variabele lengte aan analysedata. Mijn vraag is: hoe map ik het eerste blok van bytes op deze struct?
In code (snippets uit mijn applicatie):
Vanaf regel 30 is mijn probleem neergezet.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| // Het structuur waar ik een deel van de ontvangen bytes op wil mappen
struct RtSignalDumpStruct // even flink gestript
{
public uint m_DumpCounter;
public ushort m_Identity;
public uint m_SendingPacb;
public ushort m_NrSignalDataBytes;
};
private RtSignalDumpStruct m_SignalDumpHeader;
// Het asynchrone afhandelen van de UDP-socket (inclusief de buffer)
// ----------------------------------------------------------
private byte [] m_SockBuffer = new byte[MAX_DATA_BUFFER_SIZE];
... // klaarzetten van socket voor async ontvangst
AsyncCallback recieveData = new AsyncCallback( OnRecievedData );
fi_Socket.BeginReceive( m_SockBuffer, 0, m_SockBuffer.Length,
SocketFlags.None, recieveData, fi_Socket );
... // en de code binnen de callback routine
Socket mySocket = (Socket)ar.AsyncState;
int nBytesRec = mySocket.EndReceive( ar );
// Nu afhandelen van de data
// --------------------
if ( nBytesRcv > 0 )
{
// Hier is mijn probleem:
// Stel ik heb 100 bytes ontvangen. Hiervan is sizeof(RtSignalDumpStruct)
// de header waarvan RtSignalDumpStruct.m_NrSignalDataBytes aangeeft
// hoeveel overige data nog volgt (in dit voorbeeld 100-12=88).
// In C/C++ spiegelde je het structuur over de data via bijvoorbeeld:
// RtSignalDumpStruct* pStruct = (RtSignalDumpStruct*)&deDataBlock;
// pStruct->m_NrSignalDataBytes ....... etc
// --------------------------------
// Wat is DE methode hiervoor binnen C# zodat ik de members
// van RtSignalDumpStruct normaal kan uitlezen ????
// --------------------------------
} |