使用Csocket如何发送一个结构体
我是如下做的,却发现得不到正确结果:
首先结构体如下:
typedef struct tagGuoDianHeaderStru
{
unsigned char cStartChar1 ;
unsigned short uFrameFlag :2;
unsigned char cStartChar2 ;
}GuoDianHeaderStru ;
发送方:
GuoDianHeaderStru m_guoDianStru;
m_guoDianStru.cStartChar1= '1 ';
m_guoDianStru.uFrameFlag=1;
m_guoDianStru.cStartChar2= '2 ';
m_ClientSocket-> Send((char*)&m_guoDianStru, sizeof(GuoDianHeaderStru)+1, 0);
接收方:
char *buffer=new char[1024];
memset(buffer,0,1024);
GuoDianHeaderStru m_guoDianStru;
m_ClientSocket-> Receive((char*)&m_guoDianStru,sizeof(m_guoDianStru)+1);
m_Input=m_Input.Format( "%s ",m_guoDianStru.uFrameFlag);
无法获取unsigned short类型的数据,只能获取char类型的数据。
或:
m_ClientSocket-> Receive(buffer,sizeof(m_guoDianStru)+1);
m_guoDianStru=(GuoDianHeaderStru &)buffer;
m_Input.Format( "%s ",buffer);
只能显示第一个char类型的数据,结构体其他部分无法获取。
CWnd* pWnd=GetDlgItem(IDC_INPUTEDIT);
pWnd-> SetWindowText(m_Input);
UpdateData(FALSE);
delete []buffer;
我整个的目的是:发送端发送一个结构体,接收方接收该结构体,对该结构体的数据进行分析,并将该结构体的内容显示在编辑框中。哪位朋友能解释一下我该如何做?
[解决办法]
如果实在不行 只有自己打包了
[解决办法]
发送前,申请一块内存,然后将你要发送的结构体memcpy到这块内存,然后再send。即:
char* szBuffer1;
szBuffer1 = new char[1024];
GuoDianHeaderStru m_guoDianStru1;
memset(&m_guoDianStru1, 0, sizeof(GuoDianHeaderStru));
memcpy(szBuffer1, &m_guoDianStru1, sizeof(GuoDianHeaderStru));
nLen1 = send(mysocket1, szBuffer1, sizeof(GuoDianHeaderStru), 0);
接收时先申请一块内存char* szBuffer2; szBuffer2 = new char[1024];然后用szBuffer2接收,收到后用memcpy将接收缓存中的数据拷贝到你申请的接收结构体中。即:
char* szBuffer2;
szBuffer2 = new char[1024];
GuoDianHeaderStru m_guoDianStru2;
memset(&m_guoDianStru2, 0, sizeof(GuoDianHeaderStru));
nLen2 = recv(mysocket2, szBuffer2 , sizeof(GuoDianHeaderStru), 0);
memcpy(&m_guoDianStru2, szBuffer2 , sizeof(GuoDianHeaderStru));