代码如下:
发送过程:
function SendOrder(SendBuf:TByteDynArray): Integer;
var
Stream:TMemoryStream;
begin
Result:=0; //if send ok then return 0 else return non zero
try
try
if fIdTCPClient.Connected then
begin
Stream:=TMemoryStream.Create;
try
Stream.Write(SendBuf[0],Length(SendBuf));
fIdTCPClient.WriteStream(Stream,True,True);
finally
Stream.Free;
end;
end
else //connect error,return error code 1
Result:=1;
except //if send error then return 1
Result:=1;
end;
finally
end;
end;接收过程:
procedure TReceiveThread.Execute;
var
ReceiveBuf:TByteDynArray;
str:string;
i:integer;
count:integer;
stream : TStream;
begin
{ Place thread code here }
self.FreeOnTerminate:=True;
while not (Terminated ) and fIdTCPClient.Connected do
begin
count:=fIdTCPClient.ReadFromStack;
if count<>0 then
begin
SetLength(ReceiveBuf,count);
Stream:=TMemoryStream.Create; fIdTcpClient.ReadStream(stream,count);//---接收到的数据为0。
stream.Read(ReceiveBuf[0],count);//--读到的数据为0
Str:='';
for i:=0 to length(ReceiveBuf)-1 do
begin
str:=str+' '+ IntToHex(ReceiveBuf[i],2);
end;
fReceiveBuf :=str;
stream.Free;
end;
sendmessage(fMessagedForm.Handle,WM_Data,self.ThreadID,0);
end;end;
问题是:我单步跟踪发现
fIdTcpClient.ReadStream(stream,count);//---接收到的数据为0。
stream.Read(ReceiveBuf[0],count);//--读到的数据为0
全是0.请问这是为什么?
发送过程:
function SendOrder(SendBuf:TByteDynArray): Integer;
var
Stream:TMemoryStream;
begin
Result:=0; //if send ok then return 0 else return non zero
try
try
if fIdTCPClient.Connected then
begin
Stream:=TMemoryStream.Create;
try
Stream.Write(SendBuf[0],Length(SendBuf));
fIdTCPClient.WriteStream(Stream,True,True);
finally
Stream.Free;
end;
end
else //connect error,return error code 1
Result:=1;
except //if send error then return 1
Result:=1;
end;
finally
end;
end;接收过程:
procedure TReceiveThread.Execute;
var
ReceiveBuf:TByteDynArray;
str:string;
i:integer;
count:integer;
stream : TStream;
begin
{ Place thread code here }
self.FreeOnTerminate:=True;
while not (Terminated ) and fIdTCPClient.Connected do
begin
count:=fIdTCPClient.ReadFromStack;
if count<>0 then
begin
SetLength(ReceiveBuf,count);
Stream:=TMemoryStream.Create; fIdTcpClient.ReadStream(stream,count);//---接收到的数据为0。
stream.Read(ReceiveBuf[0],count);//--读到的数据为0
Str:='';
for i:=0 to length(ReceiveBuf)-1 do
begin
str:=str+' '+ IntToHex(ReceiveBuf[i],2);
end;
fReceiveBuf :=str;
stream.Free;
end;
sendmessage(fMessagedForm.Handle,WM_Data,self.ThreadID,0);
end;end;
问题是:我单步跟踪发现
fIdTcpClient.ReadStream(stream,count);//---接收到的数据为0。
stream.Read(ReceiveBuf[0],count);//--读到的数据为0
全是0.请问这是为什么?
解决方案 »
- 请问怎么获得cxDBPivotGrid当前点击的Cell数值?
- 為什么在多線程狀態下,反復點擊按鈕后會發生Access Violation的錯誤?
- 请问大家谁有《delphi信息系统开发实例精选》书中介绍的程序的源代码?
- 关于图形控件,做这方面的朋友可以进来看一下,应该能有点帮助。
- 请教:高手用Delphi实现 用控件访问excel文件的功能?
- 支持多网卡的困惑!!有经验的进来一看
- 用delphi开发了一套考试系统,想通过IE来访问?
- 如何使QRBAUD 的Footer 连接到 Detail后面?
- 怎样自动输入密码!!!
- 如何取得应用软件的焦点!就像汉王笔一样!
- 三层系统中TClientDataSet .ApplyUpdate(-1)的问题。高手帮忙!(50)分不够再加
- (Sender as TSpeedButton).Caption 赋值问题...
发送数据是没问题的,用流的形式发送,如果用fIdTcpClient.ReadStream(ReceiveBuf[0],count)是没问题的,
如果用流的形式读取就读不出数据来 。
我怀疑是用流读的方式不对,可我又不知道怎样写才对,所以请教各位。