Indy10中怎么把一个结构体数据用IdTCPClient发给IdTCPServer?

wg961423 2009-07-23 09:30:13

struct TMyData
{
int CMD;
AnsiString MD5;
bool HavingStream;
int StreamSize;
};

TMyData *Data=new TMyData[1];
Data->CMD=1;
Data->MD5="202CB962AC59075B964B07152D234B70";
Data->HavingStream=true;
Data->StreamSize=1024524;


怎么把这个结构体发给服务端?服务端接收到后又怎么还原呢?
...全文
260 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wg961423 2009-07-24
  • 打赏
  • 举报
回复
收到,谢谢,结帖。
xy_dream 2009-07-24
  • 打赏
  • 举报
回复
因为发送的都是以字节开势出去的,到网络上都是二进制的,
char buffer[1024]={0};
TMyData aa;
memcpy(buffer,&aa,sizeof(aa));
然后把buffer发出去

服务器端接收后数据先存放在buf里,
然后TMyData bb;
memcpy(&bb,buf,sizeof(bb));

这样就还原了
ccrun.com 2009-07-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wg961423 的回复:]
另外,sizeof(Data) 不知道为什么一直为4。
[/Quote]

因为Data只是一个指针,所以在32位系统中sizeof为4

sizeof(*Data)才是你想要的大小。
ccrun.com 2009-07-23
  • 打赏
  • 举报
回复
通过Stream中转,用Write方法发送。接收时用ReadStream

另外,结构体中,最好用字符数组,如:
struct TMyData
{
int CMD;
TCHAR MD5[33];
bool HavingStream;
int StreamSize;
};
wg961423 2009-07-23
  • 打赏
  • 举报
回复
另外,sizeof(Data) 不知道为什么一直为4。
wg961423 2009-07-23
  • 打赏
  • 举报
回复
不好意思,Indy10中没有writebuffer,Indy9中是有的。
fairchild811 2009-07-23
  • 打赏
  • 举报
回复
直接writebuffer(Data, sizeof(Data));

http://topic.csdn.net/u/20090301/20/c6c8bdb3-527c-4b59-b847-ac00fbf3f065.html

1,316

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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