首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

使用Csocket怎么发送一个结构体

2012-02-17 
使用Csocket如何发送一个结构体我是如下做的,却发现得不到正确结果:首先结构体如下:typedefstructtagGuoDi

使用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));

热点排行