UDP发送自定义结构体?
我用UDP客户端与服务器发送字符串可以,为什么不能发送自定义的结构体? 问题点数:0、回复次数:10Top
1 楼wangle11111(wangle)回复于 2004-05-01 01:14:02 得分 0
最好贴出代码 ,让大家找找错误。Top
2 楼yhqs540(Reich)回复于 2004-05-01 20:28:44 得分 0
可以发送,
以太网数据贞结构
14byte(以太网头)+20byte(ip头)+8byte(udp头)+你要发送的数据+4byte crc
你可以把结构体用memcpy复制到缓冲区Top
3 楼newlili(神啊,救救我吧!)回复于 2004-05-02 00:30:27 得分 0
把一个结构用memcpy填充到一个char* buf中。再发。在接收端也要有这个结构,结构应该是一模一样的,再转一下就OK了!Top
4 楼BitBlt(Raster Operater)回复于 2004-05-02 00:32:19 得分 0
转化为stream发送,加上个什么标记,接受端再把他还原出来。Top
5 楼zpjsj2000(zpjsj)回复于 2004-05-05 17:18:13 得分 0
http://expert.csdn.net/Expert/topic/3029/3029433.xml?temp=.8681147Top
6 楼szclm(IT的民工)回复于 2004-05-05 17:33:15 得分 0
发送一个结构体是一定可以的!
如果,你的结构体是一群指针!那你就要重新组合一下这个结构体的信息!
不然,发过去一串指针是没有意义的!
Top
7 楼simouse()回复于 2004-05-05 20:43:17 得分 0
发送
CSocket s;
s.Create(0,SOCK_DGRAM);
int nLen = sizeof(m_nNo) + sizeof(DATA);
DATA data;
data.Id = m_nNo;
strcpy(data.str,m_strString);
char *p = new char[nLen];
char *pInt = (char*)&m_nNo;
char *pData= (char*)&data;
for (int i=0;i<4;i++)
*p++ = *pInt++;
for (i=0;i<sizeof(DATA);i++)
*p++ = *pData++;
p -= nLen;
TRACE("Send:%d,%s\n",m_nNo,m_strString);
TRACE("Total:%d Bytes\n",nLen);
s.SendTo(p,nLen,5000,"192.168.0.255");
delete []p;
接收
char buffer[1024];
CString strIP;
UINT nPort;
int nLen = ReceiveFrom(buffer,1024,strIP,nPort);
TRACE("Receive %d Bytes\n",nLen);
char str1[sizeof(int)];
char *pdata = new char[nLen - sizeof(int)];
int index = 0;
for (int i=0;i<sizeof(int);i++)
str1[i] = buffer[index++];
for(i=0;i<nLen-sizeof(int);i++)
*pdata++ = buffer[index++];
pdata -= (nLen-sizeof(int));
DATA *data = (DATA*)pdata;
CString str;
str.Format("Int:%d Id:%d String:%s",*((int*)str1),data->Id,data->str);
m_pList->AddString(str);
delete []pdata;
Top
8 楼cheeralen(嵌入式)回复于 2004-05-05 22:44:03 得分 0
gzTop
9 楼sharkhuang(走吧走吧!人总会慢慢长大~)回复于 2004-05-06 10:55:17 得分 0
串行华就可以了Top
10 楼simouse()回复于 2004-05-07 19:06:14 得分 0
仔细看看我发的代码,你可以把所有结构放到一个缓冲区里发过去,收到时可能用第一个int的值来区分结构类型,再把结构的指针提出来就行了。Top




