永发信息网

请教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;
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯