socket::send簡單的數據發送
int send(SOCKET s,const char *buff,int len,int flag);
發送的數據必須是 const char* 數據,在此,可以用兩種方式進行消息發送(因爲我就會兩種...)
條件是:發送十六進制的字節數據
第一種方式:
使用 new的方式
前提需要知道發送的字節的大小,假設,我需要發送的字節大小是10
char * pBuffer = new char[10];
memset(pBuffer , 0 , 10);
pBuffer[0] = 0x03;
pBuffer[1] = 0x04;
pBuffer[2] = 0x04;
pBuffer[3] = 0x04;
pBuffer[4] = 0x04;
pBuffer[5] = 0x04;
pBuffer[6] = 0x04;
pBuffer[7] = 0x04;
pBuffer[8] = 0x04;
pBuffer[9] = 0x04;
m_socket.Send(pBuffer, 10, 0);
delete[] pBuffer;
pBuffer = NULL;
使用這種方式的弊端:當發送一段字符串時且字符串中有換行時需要注意了。而且拼接數據也是很麻煩的。
第二種方式
使用CByteArray的方式
使用這種方式,不需要提前知道發送的數據大小。
CByteArray dataArray;
dataArray.Add(0x02);
dataArray.Add(0x02);
dataArray.Add(0x02);
dataArray.Add(0x02);
dataArray.Add(0x02);
dataArray.Add(0x02);
dataArray.Add(0x02);
此時,用這種方式,需要對這些數據進行轉換,因爲send中只支持const char*的發送
需要 CByteArray 轉成 char*
int nLen = dataArray.GetSize();
char* chBuffer = new char[nLen+1];
for (int i = 0 ; i < nLen ; i++)
{
chBuffer[i] = dataArray.GetAt(i);
}
chBuffer[nLen] = '\0';
當發送成功數據後,銷燬該char*數據