关于winsock发送的问题

lamb218 2013-12-05 04:13:34
定义:

TSocketHead = packed record
TotalLength: Cardinal;
CommandId: Cardinal;
SequenceId: Cardinal;
end;
{Socket包信息}
TSocketBody = packed record
Head: TSocketHead;
bytes: array of Byte;
end;

发送代码:

body.Head.TotalLength:=12;
body.Head.CommandId:=1;
body.Head.SequenceId:=1;
send(sck, body.Head, SizeOf(body.Head), 0);

我接收到的根本就不是这些信息,这是为什么?
...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独de猫 2013-12-08
  • 打赏
  • 举报
回复
首先单独发送一个包头,看看接收到包头,是否一致。
LastAvengers 2013-12-06
  • 打赏
  • 举报
回复
试试去掉packed吧
孤独de猫 2013-12-06
  • 打赏
  • 举报
回复
不要使用pack来压缩结构体。
蓝色光芒 2013-12-06
  • 打赏
  • 举报
回复
更正一下:是 大小端,,讨厌变词频的输入法。!!
蓝色光芒 2013-12-06
  • 打赏
  • 举报
回复
不是吧,你的发送端和接收端 采用的大小段不一致 Windows系统上默认是小段在前, 2个前提:如果服务段是PC,客户端为其他小段在后的设备如手机, PC上用以下函数转换每个DWORD, function bswap(dw : DWORD) : DWORD;register; asm BSWAP EAX end; 201326592转换后得到12,16812168->2290614273,16777216->1
lamb218 2013-12-06
  • 打赏
  • 举报
回复
packed 去掉没变化
lamb218 2013-12-06
  • 打赏
  • 举报
回复
发送日志: 2013-12-06 13:40:41 Socket send: socket=2128 head(Length=12,Command=2290614273,Sequence=1) DataLength=0 Result=12 接收到的却是: 201326592 16812168 16777216 不都是无符号整型吗?我看不错哪里有错误。Cardinal是无符号整型,长度4位没错吧?我接收也是按照无符号整型接收的
蓝色光芒 2013-12-05
  • 打赏
  • 举报
回复
首先确认接收到的长度是否是SizeOf(body.Head),不是的话,其他问题。 是的话,数据应该是对的,你把接收到的数据发上来看看

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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