【发布时间】:2010-11-12 22:52:18
【问题描述】:
所以我有这个应用程序来验证用户是否可以登录的天气。
它由多个客户端(最多 200 个)和一个处理登录查询(包含用户名、密码和 IP)的服务器组成。服务器检查用户是否存在并返回一个答案。
TLoginQuery 是一条记录。
procedure TLogin_Form.btnLoginClick(Sender: TObject);
var LoginQuery1: TLoginQuery;
begin
if not LoginSocket.Active then
begin
LoginSocket.Open;
end;
//Paketchen schnüren.
LoginQuery1.Name := ledtName.Text;
LoginQuery1.Passwort := ledtPasswort.Text;
LoginQuery1.IP := LoginSocket.Socket.LocalAddress;
//LoginQuery ín den Socket legen.
LoginSocket.Socket.SendBuf(LoginQuery1, SizeOf(LoginQuery1));
end;
服务器当前读取:
procedure TServer_Form.ServerSocketClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var LoginQuery: TLoginQuery;
uservalid: boolean;
begin
uservalid := false;
Socket.ReceiveBuf(LoginQuery, SizeOf(LoginQuery));
if CheckIfUserValid(LoginQuery) then
begin
uservalid := true;
ServerSocket.Socket.SendBuf(uservalid, SizeOf(uservalid));
end;
end;
现在的问题是: 服务器(通常应该如此)是否为每个客户端创建不同的套接字连接?
我的假设:
ClientA 发送他的登录数据并从服务器接收用户有效的布尔值(上面的代码)。当 uservalid boolean 写入套接字连接时,会发生以下情况:就在 ClientA 可以获取 uservalid boolean(应该是)之前,已经登录的 ClientB 从套接字读取并获取(因为它不应该是)用户有效的布尔值。
这可以通过每个客户端使用一个套接字进行干预。对吧?
【问题讨论】:
标签: delphi sockets client-server