在C++中通过网络发送数据时,有时我们会发送这样的数据包
假如为:
ELC_PACKET
并且这个ELC_PACKET中包含了若干个小的包,假如为:
ELC_UNIT_PACKET
这时候我们的网络包该如何构成呢,这里我们用到了一个数组的概念
我也是此时发现了数组的一个奇特的用处,众所周知,数组中的数据
是严格按照内存的地址顺序,依次的排列的,这正适合我们发送一个内存块数据
在这里我们将上面的过程用程序演示如下:

  1. typedef struct ELC_UNIT_PACKET{ 
  2. int nReserve; 
  3. }*PELC_UNIT_PACKET; 
  4.  
  5. typedef struct ELC_PACKET { 
  6.     int nCount; 
  7.     ELC_UNIT_PACKET packet[1];//看到没这里就是数组的妙用; 
  8. }*PELC_PACKET; 
  9.  
  10. //发送 
  11. void SendPacket(int nCount, PELC_UNIT_PACKET pUnitPacket) 
  12.     int nSize = sizeof(ELC_PACKET ) + nCount * sizeof(ELC_UNIT_PACKET); 
  13.     LPVOID lpBuffer = malloc(nSize); 
  14.  
  15.     PELC_PACKET pPacket = (PELC_PACKET)lpBuffer; 
  16.     pPacket->nCount = nCount; 
  17.  
  18.     for (int i = 0; i < nCount; i++) { 
  19.     memcpy(&(pPacket->packet[i]), &pUnitPacket[i], sizeof(ELC_UNIT_PACKET)); 
  20.     } 
  21.      
  22.  
  23.     SendData(lpBuffer, nSize); 
  24.     free(lpBuffer); 
  25.  
  26. //接收 
  27. void ReceivePacket(LPVOID lpData, int cbSize) 
  28.     PELC_PACKET pPacket = (PELC_PACKET)lpBuffer; 
  29.     ELC_UNIT_PACKET unitpacket = { 0 };  
  30.  
  31.     for (int i = 0; i < pPacket->nCount; i++) { 
  32.     memcpy(&unitpacket , &(pPacket->packet[i]), sizeof(ELC_UNIT_PACKET)); 
  33.     //do something here 
  34.     }