我使用TIdTCPserver控件,定义了一个通讯包,包结构如下:
CommBlock = record //数据包通讯结构 服务端通讯
CommandType: integer;//TCommandType;
OperatorType: Byte; //操作方式(0:增加;1:删除;2:修改)
Name: string[255]; //
end;
其中name字段最大长度只能255(我需要更大的长度,),但是这个字段必须用固定长度字节,
因为TIdTCPserver控件读取包的时候用此方法
AThread.Connection.ReadBuffer(mCommBlock, SizeOf (mCommBlock));(如果Name: string[255]; 变为Name: string;那ReadBuffer不能 正确读出mCommBlock变量)。 还有其他定义字符串变量的方法么?
CommBlock = record //数据包通讯结构 服务端通讯
CommandType: integer;//TCommandType;
OperatorType: Byte; //操作方式(0:增加;1:删除;2:修改)
Name: string[255]; //
end;
其中name字段最大长度只能255(我需要更大的长度,),但是这个字段必须用固定长度字节,
因为TIdTCPserver控件读取包的时候用此方法
AThread.Connection.ReadBuffer(mCommBlock, SizeOf (mCommBlock));(如果Name: string[255]; 变为Name: string;那ReadBuffer不能 正确读出mCommBlock变量)。 还有其他定义字符串变量的方法么?
解决方案 »
- vclskin美化toolbar里的toolbutton,toolbutton之间没有间隔?
- [求助]急求?如何在DBGrid中再嵌入一个DBGrid可视控件?
- UPDATE语法错误!
- 如何通过 Rundll32.exe 来重启计算机?并强制终止所有进程
- 如何用程序实现光驱的弹入弹出?
- 如何实现在Windows状态栏上,鼠标移动时状态栏出现或隐藏功能。(急,急,急)
- 将Paradox7.0(delphi5.0自带的数据库)转换成sql2000。全分奉送。
- 怎样使得TGroupBox组件为透明?
- 微软的msdn对我们编程有什么作用?如何使用它?
- 请教高手:如何改变显示比例
- 各位大侠,我想做一个足疗管理系统,但搜索不到相应的图标,请各位大侠帮一下忙!!!
- 学生宿舍分配系统征集思路,请大家多提建议,谢谢~
金盆洗澡 重出江湖 打劫.抢分 掀起一场腥风血雨 戒烟攒钱 只为换新车
CommandType: integer;//TCommandType;
OperatorType: Byte; //操作方式(0:增加;1:删除;2:修改;9:上一个记录的继续)
Name: string[255]; //
end;你首先统计一下你的Name 的平均长度,比如通常不超过 64字节,那就干脆定义 Name: string [64];如果超过 64字节,你可以在下一个记录里面些其余的部分,这样不论多长Name,你都可以用若干的记录合并成你需要的Name,同时又不浪费太多的空间。
到时候你根据OperatorType的类型来判断后面的是不是前面的其余部分。
var
StrList: TStringList
Chr: Array of char;
接受的时候可以使用PChar接受,这样可以除去多余的#0,我在做UDP通信的时候就是这么定义的...,同时要注意在赋值前要初始化一下数据...
2、to pazee(耙子)(今年过年不收礼,收礼只收尿不湿):你所说的方法,可能在我的程序里用不了,因为可能同时会有好多包过来,到时候组装起来会有点麻烦(不过真要用上应该还是可以的^_^);
3、建议我用AnsiString的同学们,主要是不能定义Name: AnsiString[255];(读取包的时候要用sizeof()方法的) ;