SLen:string;
SData:array of byte;我是通过idTCPClient传送消息的,规定消息范围为0到65000,是以字节的形式来传送的,在发送前要在消息包前加载4个字节的长度值再与消息一起发关,长度值用16进制字符(0-F)表示的4位整数来表示。
str='hello'
SLen:=inttohex(sizeof(Str),4);
Str:=SLen+Str;
for i:=0 to Length(Str) do
SData[i] := DWORD(str[i]);
AThread.Connection.WriteBuffer(SData,sizeof(SData),False)
我这样写对吗?
SData:array of byte;我是通过idTCPClient传送消息的,规定消息范围为0到65000,是以字节的形式来传送的,在发送前要在消息包前加载4个字节的长度值再与消息一起发关,长度值用16进制字符(0-F)表示的4位整数来表示。
str='hello'
SLen:=inttohex(sizeof(Str),4);
Str:=SLen+Str;
for i:=0 to Length(Str) do
SData[i] := DWORD(str[i]);
AThread.Connection.WriteBuffer(SData,sizeof(SData),False)
我这样写对吗?
解决方案 »
- ado连接oracle异常的问题
- 我想实现类似QQ弹出聊天窗口那样的子窗口
- 使用dxComponentPrinter控件的窗口打开时,在一些机器上会出现程序自动关闭的情况,有谁知道是怎么回事儿?
- fast report 如何在程序运行时进入报表的设计状态?
- 如何实现功能和界面的分离?
- 我计划到国外网站发布“共享软件”挣点$$$,请帮助我啊……
- 怎样判断鼠标进入了toolbutton区域?
- 内存影射的问题,喜欢刨根问底的请进!
- 请问,怎么创建一个窗体的多个复本啊,并在需要时呼唤至前台
- cs 结构的系统如何转型到多层结构的系统 ?
- 关于库存盘点的一个“超”简单问题!
- 数据库开发交流群号:1435478
AThread.Connection.WriteInteger(Length(Str));
AThread.Connection.WriteBuffer(PChar(Str)^, Length(Str), True);
如果你非要按照你的想法来发送
str='hello'
SLen:=inttohex(Length(Str),4);
SetLength(SData, Length(Str) + 4);
Str:=SLen+Str;
for i:=1 to Length(Str) do
SData[i - 1] := ord(str[i]);
AThread.Connection.WriteBuffer(SData,Length(Str) + 4,False)
SetLength(SData, Length(Str) + 4);
Str:=SLen+Str;
for i:=1 to Length(Str) do
SData[i - 1] := ord(str[i]);
AThread.Connection.WriteBuffer(SData,Length(Str) + 4,False)
----------------------------------
动态数组发送的话恐怕会有问题,发送出去的是4字节的指针和一部分无效数据
如果要动态传值的话应该这样处理
1、首先定义一个足长的buff:array[0..65000] of Char;
2、
str='hello'
SLen:=inttohex(sizeof(Str),4);
Str:=SLen+Str;
for i:=0 to Length(Str) do
buff[i]:=str[i];
AThread.Connection.WriteBuffer(buff,length(str),False);
-------------------------------------
关键就是不要把动态数组当成abuffer发送出去...
详细原因请看:http://community.csdn.net/Expert/topic/3836/3836430.xml?temp=.5346643