Z
zdexinet
Unregistered / Unconfirmed
GUEST, unregistred user!
现在我做了一个自定义数据包的Socket收发。但是在写数据包头的PacketLength(数据包总长度)的时候,值老是不对。
自定义数据包头/包体如下:
ClientSocket程序如下:
整个数据包应该是48个字节。
但现在,在ClientSocket里取包头长度值和ServerSocket里取包头长度值是相同的。但是这个值不是48
在输出查看结果的时候。这个PacketLength好像是随机的。如:929116515 1680881508 808990310
其它值接都正常。
其次是如果我改数据包头结构如下。那PacketLength值正常。Temp值(即第一个值)又会出现混乱。请问各位大侠。怎么回事?怎么搞定呢?
自定义数据包头/包体如下:
代码:
TSMGPHead=Record
PacketLength :Integer;
RequestID :Integer;
SequenceID :Integer;
end;
TSMGPLogin=Record
ClientId :array[0..7] of Char;
AuthenticatorClient :array[0..15] of Char;
LoginMode :Byte;
TimeStamp :Integer;
Version :Byte;
end;
ClientSocket程序如下:
代码:
FillChar(cSMGPHead, SizeOf(cSMGPHead), 0);
cPacketLength:=SizeOf(cSMGPHead)+SizeOf(cSMGPLogin);
cSMGPHead.PacketLength:=htonl(cPacketLength);
cSMGPHead.RequestID:=htonl(SMGP_Login);
cSMGPHead.SequenceID:=htonl(cPacketLength);
FillChar(cSMGPLogin, SizeOf(cSMGPLogin), 0);
DateTimeToString(cLoginTimeStamp,'mmddhhnnss',Now());
cLoginClientID:='CPSMGW01';
cLoginAuthClient:=MD5Print(MD5String(cLoginClientID+'0000000'+'zengdexin'+cLoginTimeStamp));
StrPCopy(cSMGPLogin.ClientID,cLoginClientID);
StrPCopy(cSMGPLogin.AuthenticatorClient,cLoginAuthClient);
cSMGPLogin.LoginMode:=htonl(2);
cSMGPLogin.TimeStamp:=htonl(StrToInt(cLoginTimeStamp));
cSMGPLogin.Version:=htonl(2);
StreamClient.WriteBuffer(cSMGPHead,SizeOf(cSMGPHead));
StreamClient.WriteBuffer(cSMGPLogin,SizeOf(cSMGPLogin));
代码:
MemoClient.Lines.Add('Head PacketLength:'+IntToStr(ntohl(cSMGPHead.PacketLength)));
但现在,在ClientSocket里取包头长度值和ServerSocket里取包头长度值是相同的。但是这个值不是48
在输出查看结果的时候。这个PacketLength好像是随机的。如:929116515 1680881508 808990310
其它值接都正常。
其次是如果我改数据包头结构如下。那PacketLength值正常。Temp值(即第一个值)又会出现混乱。请问各位大侠。怎么回事?怎么搞定呢?
代码:
TSMGPHead=Record
Temp :Byte;
PacketLength :Integer;
RequestID :Integer;
SequenceID :Integer;
end;