AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Nach "Login" Sendet TClientSocket nicht mehr...
Thema durchsuchen
Ansicht
Themen-Optionen

Nach "Login" Sendet TClientSocket nicht mehr...

Ein Thema von Zerolith · begonnen am 5. Aug 2004
Antwort Antwort
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#1

Nach "Login" Sendet TClientSocket nicht mehr...

  Alt 5. Aug 2004, 08:56
Hallo!

ich habe jetzt endlich eine halbwegs funktioniernde Client-Server Kommunikation
die mit Kurznachrichten den Server / bzw. Client informieren welche art DAten als nächstes kommt.
(s.U. die Procedure "Query")

Nachdem ich die Query: QUERY_LOGIN losschicke läuft alles... der server registriert meine anfrage usw. antwortet. shcickt an alle Clients ne NAchricht "USer bla hat sich eingeloggt" der user der sich eingeloggt hat bekommt ein bescheid dass sein login erfolgreich war usw.

sobald das getan ist schickt das TClientSocket nichts mehr... es kommt aber auch kein fehler...

könnt ihr mir helfen? ich steh voll aufm schlauch...

Danke, Daniel

Sourcode
Delphi-Quellcode:
// SERVER
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var ctr : TControlRec;
    tmpint : integer;
    cMSG : TChatRec;
    LoginRec : TLoginRec;
    ServerRec : TServerInfoRec;
    size : LongWord;
    nRead : Integer;
    Buff : Array[Word] Of Byte;
    OldPos : Integer;
    fdata : TMemoryStream;
begin
  tmpint := GetIndexForSocketHandle(Socket.SocketHandle);
  if tmpint <> -1 then
  begin
    if server_type[tmpint].TypeID = QUERY_CONTROL then
    begin
      Socket.ReceiveBuf(ctr, sizeof(ctr));
      server_type[tmpint].TypeID := ctr.QUERY;
      if ctr.QTYPE = CLIENT_RESPO then
        Socket.SendBuf(ctr, sizeOf(TControlRec));
    end
    else if server_type[tmpint].TypeID = QUERY_CHATMSG then
    begin
      Socket.ReceiveBuf(cMSG, sizeOF(cMsg));
      SendToAllClients(cMSG);
      server_type[tmpint].TypeID := 0;
    end
    else if server_type[tmpint].TypeID = QUERY_LOGINOK then
      BroadCast('User '+server_type[tmpint].UserRec.Username+' logged in')
    else if server_type[tmpint].TypeID = QUERY_LOGIN then
    begin
      fdata := TMemoryStream.Create;
      OldPos := fdata.Position;
      fData.Position := fData.Size;
      Repeat
        nRead := Socket.ReceiveBuf(buff, High(Buff) - Low(Buff));
        fData.WriteBuffer(buff, nRead);
      Until ( Socket.ReceiveLength = 0 );
      fData.Position := OldPos;
      fdata.Read(LoginRec.UserId , sizeof(LongWord));
      
      fdata.read(size, SizeOf(size));
      SetLength(LoginRec.UserName, Size);
      fdata.read(Pointer(LoginRec.UserName)^, size);

      fdata.read(size, SizeOf(size));
      SetLength(LoginRec.Password, Size);
      fdata.read(Pointer(LoginRec.Password)^, size);

      fdata.Free;
      if CheckUser(LoginRec) then
      begin
        ServerResponceQuery(Socket, QUERY_LOGINOK);
        server_type[tmpint].UserRec := LoginRec;
      end
      else
        ServerQuery(Socket, QUERY_LOGINERR);
      server_type[tmpint].TypeID := 0;
    end
    else if server_type[tmpint].TypeID = QUERY_SERVERINFO then
    begin
      ServerRec := thisserver;
      Socket.SendBuf(ServerRec, SizeOf(TServerInfoRec));
      server_type[tmpint].TypeID := 0;
    end else
      Socket.ReceiveBuf(ctr, sizeof(ctr));
  end;
end;


// CLIENT
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var cMSG : TChatRec;
    sText : String;
    rxTxt : TRxTextAttributes;
    ctr : TControlRec;
    size : LongWord;
    nRead : Integer;
    Buff : Array[Word] Of Byte;
    OldPos : Integer;
    fdata : TMemoryStream;
begin
  if client_type = QUERY_CONTROL then
  begin
    Socket.ReceiveBuf(ctr, SizeOf(ctr));
    client_type := ctr.QUERY;
    if ctr.QTYPE = SERVER_RESPO then
      ClientResponceQuery(ctr.QUERY);
  end
  else if client_type = QUERY_LOGIN then
  begin
    ClientSocket1.Socket.SendBuf(tmpLOGIN, SizeOf(TLoginRec));
    client_type := 0;
  end
  else if client_type = QUERY_RECEIVEMESSAGE then
  begin
    fdata := TMemoryStream.Create;
    OldPos := fdata.Position;
    fData.Position := fData.Size;
    Repeat
      nRead := Socket.ReceiveBuf(buff, High(Buff) - Low(Buff));
      fData.WriteBuffer(buff, nRead);
    Until ( Socket.ReceiveLength = 0 );
    fData.Position := OldPos;
    fdata.Read(cmsg.UserId, sizeof(LongWord));
    fdata.Read(cmsg.UserToId, sizeof(LongWord));
    fdata.Read(cmsg.Color, sizeof(TColor));
    fdata.read(size, SizeOf(size));
    SetLength(cmsg.Msg, Size);
    fdata.read(Pointer(cmsg.Msg)^, size);
    fdata.Read(cmsg.UserToId, sizeof(LongWord));
    fdata.Free;
    client_type := 0;
    WriteChatMessage(CMSG);
  end
  else if client_type = QUERY_CHATMSG then
  begin
    ClientSocket1.Socket.SendBuf(tmpCMSG, SizeOf(TChatRec));
    client_type := 0;
  end
  else if client_type = QUERY_LOGINOK then
  begin
    Socket.ReceiveBuf(ctr,sizeof(ctr));
    FSmilies.Add('Login Accepted');
    ClientResponceQuery(QUERY_LOGINOK);
    client_type := 0;
  end
  else if client_type = QUERY_LOGINERR then
  begin
    FSmilies.Add('Couldn''t Login...');
    ClientSocket1.Active := FALSE;
  end;
  Socket.Data := nil;
end;

// Query
procedure TForm1.Query(AType: Integer);
var ctr : TControlRec;
begin
  ctr.QUERY := AType;
  ctr.QTYPE := CLIENT_QUERY;
  if ClientSocket1.Active = TRUE then
    ClientSocket1.Socket.SendBuf(ctr, sizeOf(TControlRec));
end;
Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz