IdTCPClient与 IdTCPServer 间传输问题,请指教。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, Grids, DBGrids, StdCtrls, ADODB, IdTCPServer,
IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;
type
Tuser = record
s_id:array[0..50] of string;
s_name:array[0..50] of string;
s_age:array[0..50] of string;
s_text:array[0..50] of string;
dt_date:array[0..50] of TDateTime;
end;
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Button1: TButton;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Memo1: TMemo;
IdTCPClient1: TIdTCPClient;
IdTCPServer1: TIdTCPServer;
ADOQuery1: TADOQuery;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
strm: TMemoryStream;
//user:Tuser;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; user:Tuser;
begin
strm:= TMemoryStream.Create;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
for i:= 1 to ADOQuery1.RecordCount do
begin
user.s_id[i-1]:= ADOQuery1.FieldByName('i_id').AsString;
user.s_name[i-1]:= ADOQuery1.FieldByName('vc_name').AsString;
user.s_age[i-1]:= ADOQuery1.FieldByName('vc_age').AsString;
user.s_text[i-1]:= ADOQuery1.FieldByName('vc_text').AsString;
user.dt_date[i-1]:= ADOQuery1.FieldByName('dt_date').AsDateTime;
ADOQuery1.Next;
end;
end;
strm.WriteBuffer(user,sizeof(Tuser));
self.IdTCPClient1.Host:='127.0.0.1';
self.IdTCPClient1.Port:=9999;
try
self.IdTCPClient1.Connect(5000);
//self.IdTCPClient1.Writebuffer(strm,sizeof(strm));
self.IdTCPClient1.WriteStream(strm,true,False);
self.IdTCPClient1.Disconnect;
except
on e:exception do
memo1.Lines.Add(e.Message);
end;
strm.Free;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
with ADOQuery1 do
begin
Close;
SQL.Clear;
SQL.Add('select * from sy');
Open;
end;
self.IdTCPServer1.DefaultPort:=9999;
self.IdTCPServer1.Active:= true;
end;
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
i:integer; user:TUser;
begin
strm:= TMemoryStream.Create;
with AThread.Connection do
begin
AThread.Connection.ReadStream(strm,-1,FALSE);// 跟踪:strm显示为strm(),证明数据没过来
strm.ReadBuffer(user,sizeof(TUser));
memo1.Lines.Add(user.s_id[1]); //没有看到user.s_id[1]的数据
end;
end;
end.
不知道具体应该怎么改,谢谢大家。