Delphi简单TCP聊天程序(三):登录注册功能
2011-08-24 14:58
357 查看
对于聊天程序来说,登陆和注册是很重要的,今天我就来讲讲登录和注册功能。
第一步当然是新建个数据库 。打开Microsoft Access,新建数据库,保存为user.mdb,建表user,新建两个字段Username和Password记录用户名和密码。然后在服务器端中放一个TADOQuery和一个TADOConnection。在FormCreate中连接数据库
第一步当然是新建个数据库 。打开Microsoft Access,新建数据库,保存为user.mdb,建表user,新建两个字段Username和Password记录用户名和密码。然后在服务器端中放一个TADOQuery和一个TADOConnection。在FormCreate中连接数据库
const dbName = 'user.mdb'; begin .... try ADOConnection.Close; ADOConnection.ConnectionString := 'Provider=Microsoft.JET.OLEDB.4.0;' + 'Data Source=' + ExtractFilePath(Paramstr(0)) + dbName + ';Persist Security Info=False'; ADOConnection.Open(); except end; end;客户端在登录时会向服务器端发送CMD_LOGIN命令,所以我们在ServerExecute进行处理
{SQLSearch ---------- 功能:查找数据库 参数: sqlText: SQL语句 sqlConnection:SQL连接 返回值:如果查找到了为真} function SQLSearch(sqlText: string; sqlConnection: TADOConnection): boolean; var ADOQuery: TADOQuery; begin ADOQuery := TADOQuery.Create(nil); ADOQuery.Connection := sqlConnection; with ADOQuery do begin close; SQL.Clear; SQL.Add(sqlText); Open; result := not ADOQuery.IsEmpty; end; end; {checkUser 功能:检查用户名密码是否正确 参数: username:用户名 password:密码 返回值:是否正确} function TMainForm.checkUser(username, password: string): boolean; var str: string; begin str := 'Select * From [user] where username=' + quotedStr(username) + 'and password=' + quotedStr(password); result := SQLSearch(str, ADOConnection); end; procedure TMainForm.TCPServerExecute(AContext: TIdContext); var s: string; username, password: string; begin s := AContext.Connection.socket.ReadLn(); if s = 'CMD_LOGIN' then begin username := AContext.Connection.socket.ReadLn(); //读取用户名,密码 password := AContext.Connection.socket.ReadLn(); if checkUser(username, password) then //检查是否正确并回应客户端 begin AContext.Connection.socket.WriteLn('LOGIN_SUCCESSFULLY'); end else begin AContext.Connection.socket.WriteLn('LOGIN_FAILED'); end; exit; end; ..... end;同样的,注册也可以很简单的实现
procedure TMainForm.TCPServerExecute(AContext: TIdContext); var s: string; username, password: string; begin ... if s = 'CMD_REGISTER' then begin username := AContext.Connection.socket.ReadLn(); //读取用户名,密码 password := AContext.Connection.socket.ReadLn(); if SQLSearch('Select * From [user] where username=' + quotedStr(username), ADOConnection) then begin AContext.Connection.Socket.WriteLn('REGISTER_FAILED'); //假如用户名已被注册,发送REGISTER_FAILED AContext.Connection.Socket.WriteLn('Username is already registered.'); exit; end; ADOQuery.Connection := ADOConnection; with ADOQuery do begin close; SQL.Clear; SQL.Add('Insert into [user]([Username], [Password]) values(''' + username + ''', ''' + password + ''')'); ExecSQL; end; AContext.Connection.socket.WriteLn('REGISTER_SUCCESSFULLY'); exit; end; ... end;修改一下客户端的代码
function login(username, password: string): boolean; var ret: string; begin suspendThread(listenThread); log('Username: '+ username); TCPClient.Socket.WriteLn('CMD_LOGIN'); //发送CMD_LOGIN命令,用户名,密码 TCPClient.Socket.WriteLn(username); TCPClient.Socket.WriteLn(password); ret := TCPClient.Socket.ReadLn(); //接受服务器端回应 if ret = 'LOGIN_FAILED' then //登陆失败 begin log('Login failed.'); ResumeThread(listenThread); result := false; exit; end; ResumeThread(listenThread); result := true; end; procedure reg(username, password: string); var ret: string; begin suspendThread(listenThread); log('Username: '+ username); TCPClient.Socket.WriteLn('CMD_REGISTER'); //发送CMD_LOGIN命令,用户名,密码 TCPClient.Socket.WriteLn(username); TCPClient.Socket.WriteLn(password); ret := TCPClient.Socket.ReadLn(); if ret = 'REGISTER_FAILED' then //注册失败 begin ret := TCPClient.Socket.ReadLn(); log('Register failed, Error msg: ' + ret); showMessage('Register failed, Error msg: ' + ret); ResumeThread(listenThread); exit; end; log('Register successfully, ' + username); ResumeThread(listenThread); end;在登录注册时我将ListenThread暂时挂起,目的是为了让处理函数能接收到服务器端的回应
相关文章推荐
- Delphi简单TCP聊天程序(二):双向传输
- 一个超级简单的tcp聊天程序
- 新手教你学Spring MVC4.0+MyBatis+MySQL5.0实现简单用户注册登录程序(一)
- 新手教你学Spring MVC4.0+MyBatis+MySQL5.0实现简单用户注册登录程序(三)
- 简单的Tcp点对点聊天程序
- 一个用Java写的简单的TCP聊天程序
- shell 实现简单的登录和注册功能
- Java_GUI创建单机版QQ聊天小程序并实现简单的小功能(附所有源码)
- nodejs简单实现TCP服务器端和客户端的聊天功能示例
- node.js基于express框架搭建一个简单的注册登录Web功能
- phpredis实战--简单实现注册,删除,编辑,分页,登录,关注等功能
- php实现简单用户登录功能程序代码
- Java小程序之集合框架模拟数据库实现用户登录和注册功能
- php程序注册功能简单判断用户名是否存在
- 网络编程学习笔记二(实现一个基于简单TCP的用户注册程序)
- #教你简单实现小程序的一键登录、当前用户、用户安全功能
- 用php实现简单的登录和注册功能
- Python实现注册、登录小程序功能
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并
- 使用node.js实现简单注册登录功能