当客户端第四次连接时,红色标记的那句出现,invalid pointer operation错误,高手请指教
unit hlncserver;interfaceuses
ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, DB, ADODB,
ComCtrls; //
type
fame=record
fame_id:integer; /
id:double; //
crop:integer; //
time:tdatetime; //
count:integer; //
grass:integer; //
water:integer; //
Snoopy:integer; //
friends:string[200]; //
feiendscount:integer; //
Length :integer;
end;
//定义结构体
type
count=record
//bianhao:integer; //头文件
nick: string[200]; //用户名 昵称
sex:integer; //性别
photo: string[50]; //头像
vip: integer; // vip级别
gold:double; //金钱用于排行榜
egold:double;
exp:double; //经验用于排行榜
land:integer; //
iArr_fame: array of fame; // ,
tuigangren:string[200]; //推广人
tuigangcount:integer; //此人 推广数量
time:double; //在线时间//本月在线超过90小时
length :integer;
end;
type
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Edit1: TEdit;
Memo1: TMemo;
StatusBar1: TStatusBar;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
USES ACTIVEX;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPServer1.Active:= true;
//timer1.Enabled:=true;
StatusBar1.Panels[0].Text :='等待客户端连接...';
end;procedure TForm1.Button2Click(Sender: TObject);
begin
IdTCPServer1.Active :=false;
StatusBar1.Panels[0].Text :='服务器套接字连接已经关闭,无法接受客户端的连接请求....';
end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
ise: tstringlist ;
stream: TMemoryStream;
tou,tou1,tou2,tou3,tou4,name2,name3,mima2,name1,gen1,gens,names,h_name:string;
oreader,i,j:integer;
famelastid:double;
s_count:count;
//irr_fame:array of fame ; //
user_id: integer; //begin
//接受数据********************************************************************************
if not AThread.Terminated and AThread.Connection.Connected then
begin
Coinitialize(nil);
ADOConnection1.Connected:=true;
stream:= TMemoryStream.Create ;
ise:=tstringlist.Create ;
athread.Connection.ReadStream(stream,athread.connection.readinteger,false);
stream.Position :=0 ;
//Memo1.Lines.LoadFromStream(stream);
//stream.ReadBuffer(buf,stream.Size );
ise.Delimiter:=' ';
ise.LoadFromStream(stream);
//stream.;
//ise.Delimiter:=' ';
//memo1.Lines.Add(ise.Text ) ;
//ise.Delimiter:=' ';
tou:=ise[0];
///memo1.Lines.Add(tou ); //头文件判断 //如果头
if tou='fame' then
begin
name2:=ise[1] ;
mima2 :=ise[2] ;
with memo1.Lines do
begin
Add(Name2);
add(mima2);
//add(ip);
//add(inttostr(port));
end;
//判断是否有这个用户名并发送数据SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
try
//Coinitialize(nil);
//ADOConnection1.Connected:=true; ADOQuery1.Close();
ADOQuery1.SQL.Text := 'SET NAMES gbk;';
ADOQuery1.ExecSQL();
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add('select * from nc_user where nc_username='''+name2+''' and nc_psw ='''+mima2+'''');
ADOQuery1.Open ;
if ADOQuery1.RecordCount >0 then
begin
s_count.land:= ADOQuery1.FieldValues['nc_land'];
user_id:= ADOQuery1.FieldValues['nc_id'];
s_count.nick:=ADOQuery1.FieldValues['nc_nick'];
s_count.sex:= ADOQuery1.FieldValues['nc_sex'];
s_count.photo:= ADOQuery1.FieldValues['nc_touxiang'] ;
s_count.vip:= ADOQuery1.FieldValues['nc_vip'];
s_count.gold:= ADOQuery1.FieldValues['nc_gold'];
s_count.egold:= ADOQuery1.FieldValues['nc_egold'];
s_count.exp:= ADOQuery1.FieldValues['nc_exp'];
s_count.tuigangren:= ADOQuery1.FieldValues['nc_tuiguangren'];
s_count.tuigangcount:= ADOQuery1.FieldValues['nc_tuiguangcount'];
s_count.time:= ADOQuery1.FieldValues['nc_zxtime'];
memo1.Lines.Add(s_count.nick);
if s_count.land =0 then //没;;;;;;
begin
ADOConnection1.BeginTrans ;
try
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
adoquery1.SQL.Add('update nc_user set nc_land=:n1c_land' ) ;
ADOQuery1.Parameters.ParamByName('n1c_land').Value :=0;
adoquery1.ExecSQL;
ADOConnection1.CommitTrans ;
except
ADOConnection1.RollbackTrans ;
end;
// SetLength(irr_fame, 6);
SetLength(s_count.iArr_fame, 6);
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add('select * from famelastid ');
ADOQuery1.Open ;
famelastid:= ADOQuery1.FieldValues['nc_famelastid'];
memo1.Lines.Add(floattostr(famelastid));
for i:=1 to 6 do
begin
s_count.iArr_fame[i].id:=famelastid+strtofloat(inttostr(i));
end;
end //结束没
else //
begin
end; // 结束如果 end
else //没有这个人发送信息让注册
begin
end; finally
end;
//结束判断是否有这个用户名并发送数据SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
end
//
else
if tou='hunting' then
begin
end;
ise.Free ;
stream.Free;
CoUninitialize; end; // if not AThread.Terminated and AThread.Connection.Connected then************************end;end.
unit hlncserver;interfaceuses
ShareMem,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPServer, DB, ADODB,
ComCtrls; //
type
fame=record
fame_id:integer; /
id:double; //
crop:integer; //
time:tdatetime; //
count:integer; //
grass:integer; //
water:integer; //
Snoopy:integer; //
friends:string[200]; //
feiendscount:integer; //
Length :integer;
end;
//定义结构体
type
count=record
//bianhao:integer; //头文件
nick: string[200]; //用户名 昵称
sex:integer; //性别
photo: string[50]; //头像
vip: integer; // vip级别
gold:double; //金钱用于排行榜
egold:double;
exp:double; //经验用于排行榜
land:integer; //
iArr_fame: array of fame; // ,
tuigangren:string[200]; //推广人
tuigangcount:integer; //此人 推广数量
time:double; //在线时间//本月在线超过90小时
length :integer;
end;
type
TForm1 = class(TForm)
IdTCPServer1: TIdTCPServer;
Button1: TButton;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
Edit1: TEdit;
Memo1: TMemo;
StatusBar1: TStatusBar;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure IdTCPServer1Execute(AThread: TIdPeerThread);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
USES ACTIVEX;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
IdTCPServer1.Active:= true;
//timer1.Enabled:=true;
StatusBar1.Panels[0].Text :='等待客户端连接...';
end;procedure TForm1.Button2Click(Sender: TObject);
begin
IdTCPServer1.Active :=false;
StatusBar1.Panels[0].Text :='服务器套接字连接已经关闭,无法接受客户端的连接请求....';
end;procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var
ise: tstringlist ;
stream: TMemoryStream;
tou,tou1,tou2,tou3,tou4,name2,name3,mima2,name1,gen1,gens,names,h_name:string;
oreader,i,j:integer;
famelastid:double;
s_count:count;
//irr_fame:array of fame ; //
user_id: integer; //begin
//接受数据********************************************************************************
if not AThread.Terminated and AThread.Connection.Connected then
begin
Coinitialize(nil);
ADOConnection1.Connected:=true;
stream:= TMemoryStream.Create ;
ise:=tstringlist.Create ;
athread.Connection.ReadStream(stream,athread.connection.readinteger,false);
stream.Position :=0 ;
//Memo1.Lines.LoadFromStream(stream);
//stream.ReadBuffer(buf,stream.Size );
ise.Delimiter:=' ';
ise.LoadFromStream(stream);
//stream.;
//ise.Delimiter:=' ';
//memo1.Lines.Add(ise.Text ) ;
//ise.Delimiter:=' ';
tou:=ise[0];
///memo1.Lines.Add(tou ); //头文件判断 //如果头
if tou='fame' then
begin
name2:=ise[1] ;
mima2 :=ise[2] ;
with memo1.Lines do
begin
Add(Name2);
add(mima2);
//add(ip);
//add(inttostr(port));
end;
//判断是否有这个用户名并发送数据SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
try
//Coinitialize(nil);
//ADOConnection1.Connected:=true; ADOQuery1.Close();
ADOQuery1.SQL.Text := 'SET NAMES gbk;';
ADOQuery1.ExecSQL();
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add('select * from nc_user where nc_username='''+name2+''' and nc_psw ='''+mima2+'''');
ADOQuery1.Open ;
if ADOQuery1.RecordCount >0 then
begin
s_count.land:= ADOQuery1.FieldValues['nc_land'];
user_id:= ADOQuery1.FieldValues['nc_id'];
s_count.nick:=ADOQuery1.FieldValues['nc_nick'];
s_count.sex:= ADOQuery1.FieldValues['nc_sex'];
s_count.photo:= ADOQuery1.FieldValues['nc_touxiang'] ;
s_count.vip:= ADOQuery1.FieldValues['nc_vip'];
s_count.gold:= ADOQuery1.FieldValues['nc_gold'];
s_count.egold:= ADOQuery1.FieldValues['nc_egold'];
s_count.exp:= ADOQuery1.FieldValues['nc_exp'];
s_count.tuigangren:= ADOQuery1.FieldValues['nc_tuiguangren'];
s_count.tuigangcount:= ADOQuery1.FieldValues['nc_tuiguangcount'];
s_count.time:= ADOQuery1.FieldValues['nc_zxtime'];
memo1.Lines.Add(s_count.nick);
if s_count.land =0 then //没;;;;;;
begin
ADOConnection1.BeginTrans ;
try
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
adoquery1.SQL.Add('update nc_user set nc_land=:n1c_land' ) ;
ADOQuery1.Parameters.ParamByName('n1c_land').Value :=0;
adoquery1.ExecSQL;
ADOConnection1.CommitTrans ;
except
ADOConnection1.RollbackTrans ;
end;
// SetLength(irr_fame, 6);
SetLength(s_count.iArr_fame, 6);
ADOQuery1.Close;
ADOQuery1.SQL.Clear ;
ADOQuery1.SQL.Add('select * from famelastid ');
ADOQuery1.Open ;
famelastid:= ADOQuery1.FieldValues['nc_famelastid'];
memo1.Lines.Add(floattostr(famelastid));
for i:=1 to 6 do
begin
s_count.iArr_fame[i].id:=famelastid+strtofloat(inttostr(i));
end;
end //结束没
else //
begin
end; // 结束如果 end
else //没有这个人发送信息让注册
begin
end; finally
end;
//结束判断是否有这个用户名并发送数据SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
end
//
else
if tou='hunting' then
begin
end;
ise.Free ;
stream.Free;
CoUninitialize; end; // if not AThread.Terminated and AThread.Connection.Connected then************************end;end.
有时出现这个错误
............
从0开始的
if not AThread.Terminated and AThread.Connection.Connected then
begin
//Coinitialize(nil);
//ADOConnection1.Connected:=true;
//把上面两句注释掉
stream:= TMemoryStream.Create ;
ise:=tstringlist.Create ;
athread.Connection.ReadStream(s