TidTCPClient 控件 如何接收数据????? TIDClient 控件 可以向 服务器 主动发送信息,服务器TIDServer 有OnExecute 事件函数可以接收来自 client的数据,同时在OnExecute 事件函数中server可以向client 发数据,但是 server 主动向 client 发数据,client 怎么知道??如何接收??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 unit t_Getdata;interfaceuses Classes,windows,SysUtils,VBase, xmldom, XMLIntf, msxmldom, XMLDoc ,ACTIVEX,ADODB,Controls,dialogs;type TGetData = class(TThread) private { Private declarations } GetStreamData , StreamData :TMemoryStream; tmpXml :IXMLDocument ; protected procedure Execute; override; public constructor Create; destructor Destroy;override; end;implementationuses Frm_Waiting, Frm_Main, FBase, Frm_Error;{ TGetData }procedure TGetData.Execute;type TTestMethod = procedure (StreamData:TMemoryStream) of object;var WaitFormHandle , WaitingFormHandle : THandle; rstint : integer; rststr : string; messages , commandid :string; i , NowReadSize , TotalSize :integer; vWinControl: TWinControl; vMethodAddress: Pointer; vMethod: TMethod;begin { Place thread code here } CoInitialize(nil); while (not Terminated) do begin rstint := 0; if not FrmMain.tcConn.Connected then begin Terminate ; exit; end; try TotalSize:=strtoint(FrmMain.tcConn.ReadLn); i:=3; StreamData.SetSize(0); FrmMain.tcConn.ReadStream(StreamData,FrmMain.tcConn.ReadInteger ,false); StreamData.Seek(0,soFromBeginning); GetStreamData.CopyFrom(StreamData,StreamData.Size); StreamData.SaveToFile('1.xml'); GetStreamData.SaveToFile('2.xml'); NowReadSize:= StreamData.Size ; while GetStreamData.Size < TotalSize do begin NowReadSize:= StreamData.Size ; FrmMain.tcConn.ReadStream(StreamData,FrmMain.tcConn.ReadInteger ,false); StreamData.Seek(0,soBeginning); GetStreamData.WriteBuffer(StreamData,StreamData.Size); GetStreamData.SaveToFile(inttostr(i)+'.xml'); inc(i); end; GetStreamData.Seek(0,soBeginning); GetStreamData.SaveToFile('asdf.xml'); if GetStreamData.Size =TotalSize then begin tmpXml := TXMLDocument.Create(nil); tmpXml.XML.LoadFromStream(GetStreamData); try tmpXml.Active := true; rstint := tmpXml.DocumentElement.Attributes['RstInt'] ; commandid := tmpXml.DocumentElement.Attributes['CommandID']; // rststr := Base64Decoder(tmpXml.DocumentElement.Attributes['RstStr']); rststr := tmpXml.DocumentElement.Attributes['RstStr']; WaitingFormHandle := tmpXml.DocumentElement.ChildNodes[0].ChildNodes[0].Attributes['Value']; WaitFormHandle := tmpXml.DocumentElement.ChildNodes[0].ChildNodes[1].Attributes['Value']; if commandid <>'SendMessage' then begin vWinControl := FindControl(WaitingFormHandle); if not Assigned(vWinControl) then Exit; vMethodAddress := vWinControl.MethodAddress('GetResult'); if not Assigned(vMethodAddress) then Exit; vMethod.Code := vMethodAddress; vMethod.Data := vWinControl; TTestMethod(vMethod)(GetStreamData); end; //PostMessage(WaitingFormHandle,wm_Result,rstint,WaitFormHandle); finally tmpXml.Active := false; end; GetStreamData.SetSize(0); end; except end; end; CoUnInitialize;end;constructor TGetdata.Create ;begin freeonterminate := true; StreamData := TMemoryStream.Create ; GetStreamData := TMemoryStream.Create; GetStreamData.SetSize(0); ADODataSet1 :=TADODataSet.Create(nil); inherited create(true);end;destructor TGetdata.Destroy;begin FreeAndNil(GetStreamData); FreeAndNil(StreamData); inherited Destroy;end;end. FastReport的数字预览显示,在界面又不显示。 安装2010后出现...... 我想给我的程序做成3用户版、6用户版,如何限制用户使用数呢??? 一个不用建立在别的WEB服务器(IIS等)上的WEB程序 怎么判断listbox为空 如何让TreeView二级子节点带CheckBox? 请问如何得到系统数据源名和ODBC里数据库的驱动程序? 救助!delpi中用IDSNMP控件查询OID值,没能得到正确结果! 50分奉上,如何将DLL中的form融合到主窗体的panel中 如何用sql语句删除excel表格 dephi l联合定义 有关变量绑定的问题?
Classes,windows,SysUtils,VBase, xmldom, XMLIntf,
msxmldom, XMLDoc ,ACTIVEX,ADODB,Controls,dialogs;type
TGetData = class(TThread)
private
{ Private declarations }
GetStreamData ,
StreamData :TMemoryStream;
tmpXml :IXMLDocument ;
protected
procedure Execute; override;
public
constructor Create;
destructor Destroy;override;
end;implementationuses Frm_Waiting, Frm_Main, FBase, Frm_Error;
{ TGetData }procedure TGetData.Execute;
type
TTestMethod = procedure (StreamData:TMemoryStream) of object;
var
WaitFormHandle ,
WaitingFormHandle : THandle;
rstint : integer;
rststr : string;
messages ,
commandid :string;
i ,
NowReadSize ,
TotalSize :integer;
vWinControl: TWinControl;
vMethodAddress: Pointer;
vMethod: TMethod;
begin
{ Place thread code here }
CoInitialize(nil);
while (not Terminated) do
begin
rstint := 0;
if not FrmMain.tcConn.Connected then
begin
Terminate ;
exit;
end;
try
TotalSize:=strtoint(FrmMain.tcConn.ReadLn);
i:=3;
StreamData.SetSize(0);
FrmMain.tcConn.ReadStream(StreamData,FrmMain.tcConn.ReadInteger ,false);
StreamData.Seek(0,soFromBeginning);
GetStreamData.CopyFrom(StreamData,StreamData.Size);
StreamData.SaveToFile('1.xml');
GetStreamData.SaveToFile('2.xml');
NowReadSize:= StreamData.Size ;
while GetStreamData.Size < TotalSize do
begin
NowReadSize:= StreamData.Size ;
FrmMain.tcConn.ReadStream(StreamData,FrmMain.tcConn.ReadInteger ,false);
StreamData.Seek(0,soBeginning);
GetStreamData.WriteBuffer(StreamData,StreamData.Size);
GetStreamData.SaveToFile(inttostr(i)+'.xml');
inc(i);
end;
GetStreamData.Seek(0,soBeginning);
GetStreamData.SaveToFile('asdf.xml');
if GetStreamData.Size =TotalSize then
begin
tmpXml := TXMLDocument.Create(nil);
tmpXml.XML.LoadFromStream(GetStreamData);
try
tmpXml.Active := true;
rstint := tmpXml.DocumentElement.Attributes['RstInt'] ;
commandid := tmpXml.DocumentElement.Attributes['CommandID'];
// rststr := Base64Decoder(tmpXml.DocumentElement.Attributes['RstStr']);
rststr := tmpXml.DocumentElement.Attributes['RstStr'];
WaitingFormHandle := tmpXml.DocumentElement.ChildNodes[0].ChildNodes[0].Attributes['Value'];
WaitFormHandle := tmpXml.DocumentElement.ChildNodes[0].ChildNodes[1].Attributes['Value'];
if commandid <>'SendMessage' then
begin
vWinControl := FindControl(WaitingFormHandle);
if not Assigned(vWinControl) then Exit;
vMethodAddress := vWinControl.MethodAddress('GetResult');
if not Assigned(vMethodAddress) then Exit;
vMethod.Code := vMethodAddress;
vMethod.Data := vWinControl;
TTestMethod(vMethod)(GetStreamData);
end;
//PostMessage(WaitingFormHandle,wm_Result,rstint,WaitFormHandle);
finally
tmpXml.Active := false;
end;
GetStreamData.SetSize(0);
end;
except
end;
end;
CoUnInitialize;
end;constructor TGetdata.Create ;
begin
freeonterminate := true;
StreamData := TMemoryStream.Create ;
GetStreamData := TMemoryStream.Create;
GetStreamData.SetSize(0);
ADODataSet1 :=TADODataSet.Create(nil); inherited create(true);
end;destructor TGetdata.Destroy;
begin
FreeAndNil(GetStreamData);
FreeAndNil(StreamData); inherited Destroy;
end;
end.