请教UDP发送结构体
答案:2 悬赏:0 手机版
解决时间 2021-12-21 01:39
- 提问者网友:骑士
- 2021-12-20 22:15
请教UDP发送结构体
最佳答案
- 五星知识达人网友:酒者煙囻
- 2021-12-20 22:24
UDP传输数据,你掉用的是QUdpSocket::writeDatagram ()函数吧。 如果发送结构体struct AA (AA内部没有指针什么的); 这么写writeDatagram(&AA, sizeof(AA), ....) 接受方先定义一个接收结构体的对象 struct BB; 再接收readDatagram
全部回答
- 1楼网友:举杯邀酒敬孤独
- 2021-12-20 23:04
sendstruct = record
asize: integer;
name: array[0..0] of ansichar;
end;
你这样定义结构后,你就不能用new来分配内存了,因为用new长度就算不对了,所以要用getmem,自己算要分配的长度。比如下面:
var p:psendstruct;
s:string;
len:integer;
begin
s:='hello';
len:=sizeof(tsendstruct)+length(s);
getmem(p,len);
fillchar(p^,len,0);
p^.asize:=len;
move(s[1],p^.name,length(s));
//self.caption:=pchar(@p^.name);
idudpclient1.sendbuffer(p^, len);
freemem(p);
end;
接收的时候类似,也用getmem分配。udp发送的数据包大小是有限制的(好象1024字节),所以如果你的数据包大过这个限制,你还得自己分包。
另外,定义网络发送的结构,最好加上packed关键字,结构会小不少。比如:
sendstruct =packed record
asize: integer;
name: array[0..0] of ansichar;
end;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯