首页 > 代码库 > DIOCP之DEMO-登陆验证设计
DIOCP之DEMO-登陆验证设计
登陆设计原理:
(一)client在与服务器建立连接后向服务器发送含有"USER=XXXXX&PWD=XXXXX"或者用JSON字符串。
client的代码需要写在OnContextConnected事件中,注{"cmd":"login","User":"admin","Pwd":"admin888"}
(二)服务器收到客户端传来的命令串后,首先判断命令是不是login,查询USER是否在登陆列表或内存表或stringlist中,如果不在则查询数据库验证USER与PWD,正确后写入到登陆列表或内存表或stringlist,返回给客户验证结果,发送完成后关闭当前连接
{"cmd":"login","result":"OK"}
{"cmd":"login","result":"error"}
server的代码需要写在OnRecvBuffer事件中
备注:
Echoserver
procedure TfrmMain.OnRecvBuffer(pvClientContext:TIocpClientContext;
buf:Pointer; len:cardinal; errCode:Integer);
var
j, i:Integer;
s:AnsiString;
lvBuff:PByte;
lvFileWriter:TSingleFileWriter;
begin
if FChkShowInMemo then
begin
// 如果客户端发送的为字符串,可以用下面代码进行显示
SetLength(s, len);
Move(buf^, s[1], len);
sfLogger.logMessage(s);
if s=‘stu=admin&pwd=admin123‘ then
begin
pvClientContext.PostWSASendRequest(PAnsiChar(‘Sucess‘), Length(‘Sucess‘));
end
else
begin
pvClientContext.PostWSASendRequest(PAnsiChar(‘error‘), Length(‘error‘));//返加错误的登陆信息
pvClientContext.DoDisconnect;//关闭当前连接
end;
end;
if FChkEcho then
begin
if FChkUseBufferPool then
begin
lvBuff := GetBuffer(FPool);
Move(buf^, lvBuff^, len);
//
AddRef(lvBuff);
pvClientContext.PostWSASendRequest(lvBuff, len, dtNone, 1);
end else
begin
pvClientContext.PostWSASendRequest(buf, len);
end;
end;
if FChkShowInMemo then
begin
lvFileWriter := TSingleFileWriter(pvClientContext.Data);
if lvFileWriter = nil then
begin
lvFileWriter := TSingleFileWriter.Create;
pvClientContext.Data := lvFileWriter;
lvFileWriter.FilePreFix := Format(‘RECV_%d‘, [pvClientContext.SocketHandle]);
lvFileWriter.FilePerSize := 1024 * 1024 * 100;
end;
lvFileWriter.WriteBuffer(buf, len);
end;
end;
EchoClient:
procedure TfrmMain.OnContextConnected(pvContext: TDiocpCustomContext);
var
s:AnsiString;
begin
TEchoContext(pvContext).FStartTime := Now();
TEchoContext(pvContext).FLastTick := GetTickCount;
TEchoContext(pvContext).FMaxTick := 0;
s := mmoOnConnected.Lines.Text;
if FSendDataOnConnected then
begin
DoSend(pvContext, edt1.Text);//连接后发送数据edt1.text里面为需要向服务器验证的信息
end;
end;
本次没有用到数据库表,原理通了,其余的就简单了
DIOCP之DEMO-登陆验证设计