求助高手:用indy的tcp控件发送和接收数组该用什么函数? write() writeln()都是发送字符串writestream()发送流,也是字符串witeinteger()发送整数~~~~~~我想发送数组,还有接收?请问该用哪个函数? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实这几个都一样数组就是字符串,在内存单元中的结构是一样的procedure TForm1.Button1Click(Sender: TObject);var s: array [1..100] of byte; len: integer;begin fillchar(s, 100, 0); //数组付值 IdTCPClient1.Socket.Send(s, len );end; 对。我用socket.send 发送 用 Socket.Recv()接收,可以收到数据。可问题是:为什么发送和接收到的不一致呢??我的发送端:procedure TForm1.BtnSendClick(Sender: TObject);var sendarray: variant; begin with IdTCPClient dobegintry fillchar(sendarray,10,0);sendarray:=varArrayCreate([0,9],varbyte);sendarray[0]:=byte($FF);sendarray[1]:=byte($FF);sendarray[2]:=byte($FF);sendarray[3]:=byte($FF);sendarray[4]:=byte($FF);sendarray[5]:=byte($FF);sendarray[6]:=byte($FF);sendarray[7]:=byte($FF);sendarray[8]:=byte($FF);sendarray[9]:=byte($FF); idtcpclient.Socket.Send(sendarray,10);end;end;我的接收端:procedure TForm1.IdTCPServerExecute(AThread: TIdPeerThread);varreceived: array[0..9] of byte;beginwith AThread.Connection dobegin AThread.Connection.Socket.Recv(received,10);end;end;不管发送数据是什么 接收到 17 32 * * * * * ,前两个字节是17 32 请问为什么?怎么改?非常感谢。 sendarray:=varArrayCreate([0,9],varbyte);sendarray[0]:=byte($FF);sendarray[1]:=byte($FF);sendarray[2]:=byte($FF);sendarray[3]:=byte($FF);sendarray[4]:=byte($FF);sendarray[5]:=byte($FF);sendarray[6]:=byte($FF);sendarray[7]:=byte($FF);sendarray[8]:=byte($FF);sendarray[9]:=byte($FF);既然都是Byte数据,为什么要创建变体数组?不管你传什么数据,字符串也好,常规数组也好,传递的都是一块内存,你不会不知道你所要传递的数据的内存起始地址和长度吧? 应该是数组的定义上的问题,后来不用变体,我改成Sendarray:array[0..9]of byte;用idtcpclient.writebuffer(sendarray,10);接收到的数据都正常了。接收的时候用的idtcpclient.readbuffer();idtcpclient.readbuffer(),要指明读取的数据的长度,可以读取长度再读取数据的,用的size:=idtcpclient.readfromstack(false,-1,false);算是可以结贴了,谢谢大家的鼓励。 召唤斑竹 bdmh 我想问一下,帮外面的公司做一个功能多少钱啊 请问怎样建立空文件 dbedit的确编辑状态> delphi7的一个奇怪的问题? 谁有EZPlan控件 Delphi 的小问题 急,怎样将C:\WINDOWS\Temporary Internet Files中的文件拷到另外的目录 htSizeLast在Delphi中带表什么; 各位高手,快救救小妹,Delphi中如何调用Dll的函数和方法??? 这是什么控件 想了解com,最好是有一个delphi下可以调试通过的编写的com代码
数组就是字符串,在内存单元中的结构是一样的
procedure TForm1.Button1Click(Sender: TObject);
var
s: array [1..100] of byte;
len: integer;
begin
fillchar(s, 100, 0);
//数组付值
IdTCPClient1.Socket.Send(s, len );
end;
我用socket.send 发送 用 Socket.Recv()接收,可以收到数据。
可问题是:
为什么发送和接收到的不一致呢??
我的发送端:
procedure TForm1.BtnSendClick(Sender: TObject);
var
sendarray: variant;
begin
with IdTCPClient do
begin
try fillchar(sendarray,10,0);
sendarray:=varArrayCreate([0,9],varbyte);
sendarray[0]:=byte($FF);
sendarray[1]:=byte($FF);
sendarray[2]:=byte($FF);
sendarray[3]:=byte($FF);
sendarray[4]:=byte($FF);
sendarray[5]:=byte($FF);
sendarray[6]:=byte($FF);
sendarray[7]:=byte($FF);
sendarray[8]:=byte($FF);
sendarray[9]:=byte($FF);
idtcpclient.Socket.Send(sendarray,10);
end;
end;
我的接收端:
procedure TForm1.IdTCPServerExecute(AThread: TIdPeerThread);
var
received: array[0..9] of byte;begin
with AThread.Connection do
begin
AThread.Connection.Socket.Recv(received,10);
end;
end;不管发送数据是什么 接收到 17 32 * * * * * ,前两个字节是17 32
请问为什么?怎么改?
非常感谢。
sendarray[0]:=byte($FF);
sendarray[1]:=byte($FF);
sendarray[2]:=byte($FF);
sendarray[3]:=byte($FF);
sendarray[4]:=byte($FF);
sendarray[5]:=byte($FF);
sendarray[6]:=byte($FF);
sendarray[7]:=byte($FF);
sendarray[8]:=byte($FF);
sendarray[9]:=byte($FF);
既然都是Byte数据,为什么要创建变体数组?不管你传什么数据,字符串也好,常规数组也好,传递的都是一块内存,你不会不知道你所要传递的数据的内存起始地址和长度吧?
Sendarray:array[0..9]of byte;
用idtcpclient.writebuffer(sendarray,10);
接收到的数据都正常了。
接收的时候用的
idtcpclient.readbuffer();
idtcpclient.readbuffer(),要指明读取的数据的长度,可以读取长度再读取数据的,用的size:=idtcpclient.readfromstack(false,-1,false);
算是可以结贴了,谢谢大家的鼓励。