このアプリケーションでは、ユーザーがログインできる天気を確認しています。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;
Serverは現在、読み取ります
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ブール(上記のコードを)recieves。 uservalid booleanがソケット接続に書き込まれると、次のようになります。ClientAがuservalid booleanを取得できる直前(それがそうであるはずです)ClientBは既にログインしています。ソケットから読み込みます。 uservalid boolean。
これは、クライアントごとに1つのソケットを使用して行うことができます。右?