Tag60190=record
CmdID:Word;
bOnline:boolean;
end;
我有一个这样的结构体,服务器返回给我一个这样的结构体.服务器的代码是C++,但服务器返回的时候,把bOnline付值为1或者零我用TcpClient.ReadBuffer(TagRoleonlineback,sizeof(TagRoleonlineback));接收服务器返回给我的结构体 .
当我接收完了之后,我怎么写条件判断语句呢?比如:if byte(TagRoleonlineback.bOnline)=1 then这样写不对啊
该怎么写这个判断语句
CmdID:Word;
bOnline:boolean;
end;
我有一个这样的结构体,服务器返回给我一个这样的结构体.服务器的代码是C++,但服务器返回的时候,把bOnline付值为1或者零我用TcpClient.ReadBuffer(TagRoleonlineback,sizeof(TagRoleonlineback));接收服务器返回给我的结构体 .
当我接收完了之后,我怎么写条件判断语句呢?比如:if byte(TagRoleonlineback.bOnline)=1 then这样写不对啊
该怎么写这个判断语句
解决方案 »
- 辛苦一年却发现做了个垃圾,散分!
- 有没有类似DateTimepicker的但是可以连接datasource的控件啊?随便再问个问题!
- 谁有用过ics组件
- 麻烦各位介绍一下使用ADO组件进行数据库开发的好的资料\书籍\电子书.谢谢
- 如何禁止某个应用程序的执行?隐藏文件夹?
- www.programfan.com 这里不错哦!
- TWebBrowser问题,怎么判断一个页面真正加载完毕
- 关于一个Com服务器的问题,程序关闭的时候报错,求助
- 求救!这样的报表怎么做?看了就谢谢
- 用ADO为什么会这样?粘自我上次发的贴子,没有解决
- 求一个小程序,通过执行这个程序,如何屏蔽所有窗口的alt+f4关闭窗口功能.运行完此程序后自动隐藏.
- 关于Socket方法的赋值(有详细代码)
if TagRoleonlineback.bOnline then
CmdID:Word;
bOnline:boolean;
end;
这个结构及其内部元素的字节长度,以及内部元素的排序顺序要与C语言的一致。
且要注意是否紧密排列的影响
Tag60190=packed record
CmdID:Word;
bOnline:boolean;
end;
stredit2:string;
stredit3:string;
stredit1:string;
begin
if TcpClient.Connected =true then
TcpClient.Disconnect;
try
begin
TcpClient.Host :=Edit5.Text; // 连接服务器的IP跟端口
Tcpclient.Port :=StrtoInt(Edit6.Text);
with TcpClient do
begin
try
Connect(3000);
except
TcpClient.Host :='';
tcpclient.Port :=0;
Application.MessageBox(pChar('踢人-->登陆失败!'),pChar('错误'),MB_OK+MB_ICONINFORMATION);
end;
end;
Application.MessageBox(pChar('连接远程主机成功'),pChar('踢人'),MB_OK+MB_ICONINFORMATION);
TagCheck.CmdID :=60001;
TagCheck.wSize :=sizeof(TagCheck);
TagCheck.dwSerial :=1000000000;
TagCheck.szGmAccountName :='SuperGm';
TagCheck.szGmPassword :='kungfu';
TagRole.CmdID := 60175;
TagRole.wSize :=sizeof(TagRole);
TagRole.dwSerial :=1000000000;
stredit2 :=Edit2.Text;
stredit3 :=Edit3.Text;
stredit1:=Edit1.Text;
TagRole.dwBorough :=Crc(pchar(stredit2));
TagRole.dwWorldNameCrc :=Crc(pchar(stredit3));
FillChar(TagRole.szRoleName,SizeOf(TagRole.szRoleName),#0);
Assert(Length(stredit1)<=SizeOf(TagRole.szRoleName));
Move(PChar(stredit1)^,TagRole.szRoleName[0],Length(stredit1));
TagRoleonline.CmdID :=60185;
TagRoleonline.wSize :=sizeof(TagRole);
TagRoleonline.dwSerial :=1000000000;
TagRoleonline.dwBorough :=Crc(pchar(stredit2));
TagRoleonline.dwWorldNameCrc :=Crc(pchar(stredit3));
stredit1 :=Edit1.text;
FillChar(TagRoleonline.szRoleName,SizeOf(TagRoleonline.szRoleName),#0);
Assert(Length(stredit1)<=SizeOf(TagRoleonline.szRoleName));
Move(PChar(stredit1)^,TagRoleonline.szRoleName[0],Length(stredit1));
isize:=sizeof(TagCheck);
TcpClient.WriteBuffer(isize,sizeof(DWORD),true);//向服务器发出验证用户名跟密码的指令
TcpClient.WriteBuffer(TagCheck,sizeof(TagCheck),true);//向服务器发出验证用户名跟密码的指令
sleep(3000);
TcpClient.ReadBuffer(TagCheckback,sizeof(TagCheckback));//接受服务器返回的指令,验证是否通过
Application.MessageBox(pchar(inttostr(TagCheckback.CmdID)),pChar('角色验证ID'),MB_OK);
if TagCheckback.dwErrorCode=0 then
begin
isize :=sizeof(TagRoleonline);
TcpClient.WriteBuffer(isize,sizeof(DWORD),true);//向服务器发出查询这个角色是否在线的指令
TcpClient.WriteBuffer(TagRoleonline,sizeof(TagRoleonline),true);//向服务器发出查询这个角色是否在线的指令
sleep(3000);
TcpClient.ReadBuffer(TagRoleonlineback,sizeof(TagRoleonlineback));//接受服务器返回的指令,角色是否在线
Application.MessageBox(pchar(inttostr(TagRoleonlineback.CmdID)),pChar('角色是否在线ID'),MB_OK);
if TagRoleonlineback.bOnline then
begin
Application.MessageBox(pchar('说明已经接收到服务器发给我的角色是否在线的消息'),pChar('角色是否在线'),MB_OK);
isize :=sizeof(TagRole);
TcpClient.WriteBuffer(isize,sizeof(DWORD),true); //向服务器发出踢角色下线的指令
TcpClient.WriteBuffer(TagRole,sizeof(TagRole),true); //向服务器发出踢角色下线的指令
sleep(3000);
TcpClient.ReadBuffer(TagRoleback,sizeof(TagRoleback));//接受服务器返回的指令,踢角色下线是否成功
if TagRoleback.dwErrorCode=0 then
Application.MessageBox(pChar('该角色已被成功踢下线,请继续其它操作!'),pChar('踢人'),MB_OK+MB_ICONINFORMATION)
else
Application.MessageBox(pChar('该角色没有被成功踢下线,请继续其它操作!'),pChar('踢人'),MB_OK+MB_ICONINFORMATION);
end;
end;
TcpClient.Disconnect;
end;
except on e:exception do
begin
Application.MessageBox(pChar(e.message),pChar('踢人'),MB_OK+MB_ICONINFORMATION);
TcpClient.Disconnect;
end;
end;
end;