所以我有這個應用程序來驗證天氣用戶可以登錄或不。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布爾值。
這可以使用每個客戶端的一個套接字進行干預。對?