{$WARN SYMBOL_DEPRECATED OFF}
unit loginp;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, RzTabs, RzPanel, StdCtrls, RzLabel, Mask, RzEdit,
RzCmboBx, RzButton, Buttons, Menus, IdUDPClient, IdBaseComponent,
IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle;type
Tlogin = class(TForm)
Image1: TImage;
RzPanel1: TRzPanel;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
RzLabel1: TRzLabel;
RzLabel2: TRzLabel;
RzLabel3: TRzLabel;
RzComboBox1: TRzComboBox;
pass: TRzEdit;
cuser: TRzComboBox;
RzButton1: TRzButton;
RzButton2: TRzButton;
RzToolbarButton1: TRzToolbarButton;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
IdUDPServer1: TIdUDPServer;
IdUDPClient1: TIdUDPClient;
Label1: TLabel;
procedure RzButton2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RzButton1Click(Sender: TObject);
procedure RzToolbarButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;var
login: Tlogin;
aa:STRING;
bb:STRING;
cishu:integer;
implementationuses dmp,conn,conn2,md5;{$R *.dfm}//判断输入的ip地址是否合法
function IsIp(Str: string): Boolean;
var
I, K, DotCnt : Integer;
Num: string;
Arr: Array [1..4] of string;
begin
Result := False;
DotCnt := 0;
//由'0'..'9', '.'组成
For I := 1 to Length(Str) do
begin
if Not (Str[I] in ['0'..'9', '.']) then
Exit
else
if Str[I] = '.' then
inc(DotCnt);
end;
//点分隔符号数量应该=3
if DotCnt <> 3 then Exit;
For K := 1 to 3 do
begin
I := Pos('.', Str);
Num := Copy(Str, 1, I - 1);
Delete(Str, 1, I);
Arr[K] := Num;
end;
Arr[4] := Str;
try
DotCnt := 0;
For I := 1 to 4 do
begin
K := StrToInt(Arr[I]);
//每字节的值应介于0~255之间
if ((K >= 0) and (K <= 255)) then
Inc(DotCnt);
end;
//四个字节都满足0~255之间,则合法
if(DotCnt = 4) then
Result := True;
except
end;
end;
//==============================================================================
procedure Tlogin.RzButton2Click(Sender: TObject);
begin
application.Terminate;
end;procedure Tlogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
application.Terminate;
end;procedure Tlogin.RzButton1Click(Sender: TObject);
var
vt:string;
begin
IdUDPServer1.Active:=True;
IdUDPClient1.Active:=true;
label1.Caption:='正在连接服务器,请稍后...';
if IsIp(rzcombobox1.Text) then
begin
vt:=RzComboBox1.Text;
IdUDPClient1.Send(vt,6789,'你是否在开着');
SetADOConnection(dm.ADOConnection1,rzcombobox1.Text);
SetADOConnection1(dm.ADOConnection2);
end
else
begin
//showmessage('IP不合法,请从新输入!');
Application.MessageBox('IP不合法,请从新输入!','警告',mb_iconwarning); end;
//==============================================================================
end;procedure Tlogin.RzToolbarButton1Click(Sender: TObject);
begin
// 左健弹出菜单。
popupmenu1.Popup(mouse.CursorPos.x,mouse.CursorPos.y);
end;procedure Tlogin.FormCreate(Sender: TObject);
begin
//打开idudp
with IdUDPServer1.Bindings.Add do
begin
IP:='';
Port:=6789;
end;
//设置本地端口号
// IdUDPClient1.DefaultPort:=6789;
//设置超时连接毫秒数
IdUDPClient1.ReceiveTimeout:=5000;//毫秒
//激活服务
label1.Caption:='';
end;procedure Tlogin.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
Var
v:String;
str,id,name,kl:string;
begin
if IdUDPClient1.ReceiveTimeout=5000 then
begin
IdUDPServer1.Active:=false;
IdUDPClient1.Active:=false;
APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启或网络不稳定,请稍后在登陆!','系统信息',mb_iconwarning);
exit;
end;
if AData.Size<=0 then
Exit;
SetLength(v,AData.Size);
AData.Read(v[1],AData.Size);
if v='我已经启动了' then
begin
//ShowMessage(ABinding.IP+' is Existsed!'+s);//电脑A在线.
//判断用户是否存在,并且登陆
if (cuser.Text='') or (pass.Text='') then
APPLICATION.MESSAGEBOX('您输入姓名或密码!','错误',mb_okcancel+mb_iconerror )
else
begin
aa:=cuser.text;
bb:=MD5Print(MD5String(pass.Text));
dm.ryxx.close;
dm.ryxx.sql.Clear;
str:='select yhm,kl,yhid from ryxx where yhm='''+ aa +''' and kl='''+ bb +'''';
dm.ryxx.sql.add(str);
//dm.yh.ParamByName('aa').AsString:=cuser.Text;
//dm.yh.ParamByName('bb').AsString:=pass.Text;
dm.ryxx.open; if not dm.ryxx.Eof then
begin
//mainform.StatusBar1.Panels[0].Text:='当前用户:'+aa;
//mainform.StatusBar1.Panels[1].Text:='当前日期:'+DateTimeToStr(Now);
id:=dm.ryxx.FieldByName('yhid').AsString;
name:=dm.ryxx.FieldByName('yhm').AsString;
kl:=dm.ryxx.FieldByName('kl').AsString;
login.Hide;
//ModalResult:=mrOK; //密码正确,关闭自己,返回值mrOK; //mainform.ShowModal;
//IdUDPServer1.Active:=false;
//IdUDPClient1.Active:=false;
//display.ShowModal;
end
else
if APPLICATION.MESSAGEBOX('您输入用户名或密码有误!请再一次输入','错误信息',mb_ok+mb_iconerror)=idok then
cishu:=cishu+1;
dm.ADOConnection1.Connected:=false;
dm.ADOConnection2.Connected:=false;
//==============如果输入3次退出系统工程======================
if cishu>3 then
application.Terminate;
// cpassword.SetFocus ;end; end; end
else
begin
APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启,请稍后在登陆!','系统信息',mb_iconwarning);
end;
end;end.
我发现我的思路是这样的,点击登陆按钮。然后当dUDPServer1读取到我已经启动了' 这个时候才判断用户是否正确,但是我发现一个问题,如果服务器上程序没有启动,我客户端的程序根本就不执行
procedure Tlogin.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);,请问我这个登陆验证窗口该怎么做
unit loginp;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, jpeg, ExtCtrls, RzTabs, RzPanel, StdCtrls, RzLabel, Mask, RzEdit,
RzCmboBx, RzButton, Buttons, Menus, IdUDPClient, IdBaseComponent,
IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle;type
Tlogin = class(TForm)
Image1: TImage;
RzPanel1: TRzPanel;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
RzLabel1: TRzLabel;
RzLabel2: TRzLabel;
RzLabel3: TRzLabel;
RzComboBox1: TRzComboBox;
pass: TRzEdit;
cuser: TRzComboBox;
RzButton1: TRzButton;
RzButton2: TRzButton;
RzToolbarButton1: TRzToolbarButton;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
IdUDPServer1: TIdUDPServer;
IdUDPClient1: TIdUDPClient;
Label1: TLabel;
procedure RzButton2Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure RzButton1Click(Sender: TObject);
procedure RzToolbarButton1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
private
{ Private declarations }
public
{ Public declarations }
end;var
login: Tlogin;
aa:STRING;
bb:STRING;
cishu:integer;
implementationuses dmp,conn,conn2,md5;{$R *.dfm}//判断输入的ip地址是否合法
function IsIp(Str: string): Boolean;
var
I, K, DotCnt : Integer;
Num: string;
Arr: Array [1..4] of string;
begin
Result := False;
DotCnt := 0;
//由'0'..'9', '.'组成
For I := 1 to Length(Str) do
begin
if Not (Str[I] in ['0'..'9', '.']) then
Exit
else
if Str[I] = '.' then
inc(DotCnt);
end;
//点分隔符号数量应该=3
if DotCnt <> 3 then Exit;
For K := 1 to 3 do
begin
I := Pos('.', Str);
Num := Copy(Str, 1, I - 1);
Delete(Str, 1, I);
Arr[K] := Num;
end;
Arr[4] := Str;
try
DotCnt := 0;
For I := 1 to 4 do
begin
K := StrToInt(Arr[I]);
//每字节的值应介于0~255之间
if ((K >= 0) and (K <= 255)) then
Inc(DotCnt);
end;
//四个字节都满足0~255之间,则合法
if(DotCnt = 4) then
Result := True;
except
end;
end;
//==============================================================================
procedure Tlogin.RzButton2Click(Sender: TObject);
begin
application.Terminate;
end;procedure Tlogin.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
application.Terminate;
end;procedure Tlogin.RzButton1Click(Sender: TObject);
var
vt:string;
begin
IdUDPServer1.Active:=True;
IdUDPClient1.Active:=true;
label1.Caption:='正在连接服务器,请稍后...';
if IsIp(rzcombobox1.Text) then
begin
vt:=RzComboBox1.Text;
IdUDPClient1.Send(vt,6789,'你是否在开着');
SetADOConnection(dm.ADOConnection1,rzcombobox1.Text);
SetADOConnection1(dm.ADOConnection2);
end
else
begin
//showmessage('IP不合法,请从新输入!');
Application.MessageBox('IP不合法,请从新输入!','警告',mb_iconwarning); end;
//==============================================================================
end;procedure Tlogin.RzToolbarButton1Click(Sender: TObject);
begin
// 左健弹出菜单。
popupmenu1.Popup(mouse.CursorPos.x,mouse.CursorPos.y);
end;procedure Tlogin.FormCreate(Sender: TObject);
begin
//打开idudp
with IdUDPServer1.Bindings.Add do
begin
IP:='';
Port:=6789;
end;
//设置本地端口号
// IdUDPClient1.DefaultPort:=6789;
//设置超时连接毫秒数
IdUDPClient1.ReceiveTimeout:=5000;//毫秒
//激活服务
label1.Caption:='';
end;procedure Tlogin.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
Var
v:String;
str,id,name,kl:string;
begin
if IdUDPClient1.ReceiveTimeout=5000 then
begin
IdUDPServer1.Active:=false;
IdUDPClient1.Active:=false;
APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启或网络不稳定,请稍后在登陆!','系统信息',mb_iconwarning);
exit;
end;
if AData.Size<=0 then
Exit;
SetLength(v,AData.Size);
AData.Read(v[1],AData.Size);
if v='我已经启动了' then
begin
//ShowMessage(ABinding.IP+' is Existsed!'+s);//电脑A在线.
//判断用户是否存在,并且登陆
if (cuser.Text='') or (pass.Text='') then
APPLICATION.MESSAGEBOX('您输入姓名或密码!','错误',mb_okcancel+mb_iconerror )
else
begin
aa:=cuser.text;
bb:=MD5Print(MD5String(pass.Text));
dm.ryxx.close;
dm.ryxx.sql.Clear;
str:='select yhm,kl,yhid from ryxx where yhm='''+ aa +''' and kl='''+ bb +'''';
dm.ryxx.sql.add(str);
//dm.yh.ParamByName('aa').AsString:=cuser.Text;
//dm.yh.ParamByName('bb').AsString:=pass.Text;
dm.ryxx.open; if not dm.ryxx.Eof then
begin
//mainform.StatusBar1.Panels[0].Text:='当前用户:'+aa;
//mainform.StatusBar1.Panels[1].Text:='当前日期:'+DateTimeToStr(Now);
id:=dm.ryxx.FieldByName('yhid').AsString;
name:=dm.ryxx.FieldByName('yhm').AsString;
kl:=dm.ryxx.FieldByName('kl').AsString;
login.Hide;
//ModalResult:=mrOK; //密码正确,关闭自己,返回值mrOK; //mainform.ShowModal;
//IdUDPServer1.Active:=false;
//IdUDPClient1.Active:=false;
//display.ShowModal;
end
else
if APPLICATION.MESSAGEBOX('您输入用户名或密码有误!请再一次输入','错误信息',mb_ok+mb_iconerror)=idok then
cishu:=cishu+1;
dm.ADOConnection1.Connected:=false;
dm.ADOConnection2.Connected:=false;
//==============如果输入3次退出系统工程======================
if cishu>3 then
application.Terminate;
// cpassword.SetFocus ;end; end; end
else
begin
APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启,请稍后在登陆!','系统信息',mb_iconwarning);
end;
end;end.
我发现我的思路是这样的,点击登陆按钮。然后当dUDPServer1读取到我已经启动了' 这个时候才判断用户是否正确,但是我发现一个问题,如果服务器上程序没有启动,我客户端的程序根本就不执行
procedure Tlogin.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);,请问我这个登陆验证窗口该怎么做
解决方案 »
- 请问程序调试过程中产生的mb,db 文件有没有用,还有没有产生其他没有用的文件?
- 将c++代码转换为Delphi ,会的请帮个忙
- 数据库连接的问题
- 请问哪里有InfoPower3000下载? Install版的
- 帮我看一下我的ListView1怎么显示不了系统的图标
- 我想写一个过程,传入文件名,然后把文件用二进制方式读取传出,应该怎么做呢?
- delphi+sql server+asp 在上海可以找到4k以上吗?
- "INSERT INTO 语法错误" 为什么?
- 通过数据库生成TreeView的Item的问题
- delphi操作Excel,大家来帮忙!
- 我已经把dbcombobox与我的Dbgrid的某个字段进行了关联,,但是我的dbcombobox就是进不了那个字段所对应的单元格
- 老问题,关于treeview问题,拜托各位关注一下。
我的思路是这样的,当点击登陆按钮,则给服务器端发送一个信息,如果服务器端开启了,则服务器给客户端返回一个‘我已经启动了' 这样的信息。
然后当客户端的dUDPServer1读取到‘我已经启动了' ,才判断登陆用户是否存在。
但是我发现一个问题,如果服务器上的程序没有启动,则我客户端的程序根本就不执行
procedure Tlogin.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);,
因为我的验证用户写在procedure Tlogin.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);,这里了,所以服务器端不启动,则这里无法运行
请问我这个登陆验证窗口该怎么做
//点击登陆按钮-------------------------------------------------------
procedure Tlogin.RzButton1Click(Sender: TObject);
var
vt:string;
begin
IdUDPServer1.Active:=True;
IdUDPClient1.Active:=true;
label1.Caption:='正在连接服务器,请稍后...';
if IsIp(rzcombobox1.Text) then
begin
vt:=RzComboBox1.Text;
IdUDPClient1.Send(vt,6789,'你是否在开着');
SetADOConnection(dm.ADOConnection1,rzcombobox1.Text);
SetADOConnection1(dm.ADOConnection2);
end
else
begin
//showmessage('IP不合法,请从新输入!');
Application.MessageBox('IP不合法,请从新输入!','警告',mb_iconwarning); end;
//---------------------------------------------------------------------------
//--窗体创建-----------------------------------------------------------------
procedure Tlogin.FormCreate(Sender: TObject);
begin
//打开idudp
with IdUDPServer1.Bindings.Add do
begin
IP:='';
Port:=6789;
end;
//设置本地端口号
// IdUDPClient1.DefaultPort:=6789;
//设置超时连接毫秒数
IdUDPClient1.ReceiveTimeout:=5000;//毫秒
//激活服务
label1.Caption:='';
end;
//-------------------------------------------------------------------------
//udpserver读取信息--------------------------------------------------------
procedure Tlogin.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
Var
v:String;
str,id,name,kl:string;
begin
if IdUDPClient1.ReceiveTimeout=5000 then
begin
IdUDPServer1.Active:=false;
IdUDPClient1.Active:=false;
APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启或网络不稳定,请稍后在登陆!','系统信息',mb_iconwarning);
exit;
end;
if AData.Size<=0 then
Exit;
SetLength(v,AData.Size);
AData.Read(v[1],AData.Size);
if v='我已经启动了' then
begin
//ShowMessage(ABinding.IP+' is Existsed!'+s);//电脑A在线.
//判断用户是否存在,并且登陆
if (cuser.Text='') or (pass.Text='') then
APPLICATION.MESSAGEBOX('您输入姓名或密码!','错误',mb_okcancel+mb_iconerror )
else
begin
aa:=cuser.text;
bb:=MD5Print(MD5String(pass.Text));
dm.ryxx.close;
dm.ryxx.sql.Clear;
str:='select yhm,kl,yhid from ryxx where yhm='''+ aa +''' and kl='''+ bb +'''';
dm.ryxx.sql.add(str);
//dm.yh.ParamByName('aa').AsString:=cuser.Text;
//dm.yh.ParamByName('bb').AsString:=pass.Text;
dm.ryxx.open; if not dm.ryxx.Eof then
begin
//mainform.StatusBar1.Panels[0].Text:='当前用户:'+aa;
//mainform.StatusBar1.Panels[1].Text:='当前日期:'+DateTimeToStr(Now);
id:=dm.ryxx.FieldByName('yhid').AsString;
name:=dm.ryxx.FieldByName('yhm').AsString;
kl:=dm.ryxx.FieldByName('kl').AsString;
login.Hide;
//ModalResult:=mrOK; //密码正确,关闭自己,返回值mrOK; //mainform.ShowModal;
//IdUDPServer1.Active:=false;
//IdUDPClient1.Active:=false;
//display.ShowModal;
end
else
if APPLICATION.MESSAGEBOX('您输入用户名或密码有误!请再一次输入','错误信息',mb_ok+mb_iconerror)=idok then
cishu:=cishu+1;
dm.ADOConnection1.Connected:=false;
dm.ADOConnection2.Connected:=false;
//==============如果输入3次退出系统工程======================
if cishu>3 then
application.Terminate;
// cpassword.SetFocus ;end; end; end
else
begin
APPLICATION.MESSAGEBOX('您要连接的服务器端没有开启,请稍后在登陆!','系统信息',mb_iconwarning);
end;
end;end.