在MFC中使用socket發送簡單消息

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*數據

發佈了108 篇原創文章 · 獲贊 28 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章