所以我有这个应用程序来验证天气用户可以登录或不。TServerSocket:与套接字对象混淆
它由多个客户端(最多200个)和一个处理登录查询(包含用户名,PW和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;
现在的问题是: 服务器是否(因为它一般应)创建每个客户不同的套接字连接?
我的假设:
客户端A将他的登录数据和临危从服务器uservalid布尔(上面的代码)。当uservalid布尔值写入套接字连接时,会发生以下情况:就在ClientA可以获取uservalid布尔值(因为它应该是)之前,已经登录的ClientB从套接字读取并获取(因为它不应该) uservalid布尔值。
这可以使用每个客户端的一个套接字进行干预。对?