UDP发送自定义结构体?

richson 2004-05-01 01:09:43
我用UDP客户端与服务器发送字符串可以,为什么不能发送自定义的结构体?
...全文
288 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
simouse 2004-05-07
  • 打赏
  • 举报
回复
仔细看看我发的代码,你可以把所有结构放到一个缓冲区里发过去,收到时可能用第一个int的值来区分结构类型,再把结构的指针提出来就行了。
sharkhuang 2004-05-06
  • 打赏
  • 举报
回复
串行华就可以了
暗黑帝国 2004-05-05
  • 打赏
  • 举报
回复
gz
simouse 2004-05-05
  • 打赏
  • 举报
回复
发送
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;

szclm 2004-05-05
  • 打赏
  • 举报
回复
发送一个结构体是一定可以的!

如果,你的结构体是一群指针!那你就要重新组合一下这个结构体的信息!
不然,发过去一串指针是没有意义的!
zpjsj2000 2004-05-05
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/3029/3029433.xml?temp=.8681147
BitBlt 2004-05-02
  • 打赏
  • 举报
回复
转化为stream发送,加上个什么标记,接受端再把他还原出来。
newlili 2004-05-02
  • 打赏
  • 举报
回复
把一个结构用memcpy填充到一个char* buf中。再发。在接收端也要有这个结构,结构应该是一模一样的,再转一下就OK了!
yhqs540 2004-05-01
  • 打赏
  • 举报
回复
可以发送,
以太网数据贞结构
14byte(以太网头)+20byte(ip头)+8byte(udp头)+你要发送的数据+4byte crc
你可以把结构体用memcpy复制到缓冲区
wangle11111 2004-05-01
  • 打赏
  • 举报
回复
最好贴出代码 ,让大家找找错误。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧