AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Chattool - Probleme beim Übermitteln des Usernames
Thema durchsuchen
Ansicht
Themen-Optionen

Chattool - Probleme beim Übermitteln des Usernames

Ein Thema von Lyan · begonnen am 31. Aug 2011 · letzter Beitrag vom 31. Aug 2011
 
Lyan

Registriert seit: 5. Aug 2011
188 Beiträge
 
#1

Chattool - Probleme beim Übermitteln des Usernames

  Alt 31. Aug 2011, 10:33
Delphi-Version: 5
Delphi-Version: XE


Hallo,

habe ein Chattool, das später zum kommunizieren per Wlan geeignet sein soll (das wir im unterricht miteinander schreiben können (ohne wlan)).

Das ganze sieht so aus:
http://imageshack.us/f/854/unconnected.png/

Wenn man sich verbindet sieht es dann so aus:
http://imageshack.us/photo/my-images...onnectedp.png/

Wie man an Abbildung 2 erkennen kann, ist im Fenster "--UserList--" alles leer. Beim Server wird aber ip + Username angezeigt.

ich möchte die Leute die verbunden sind in dem Fenster angezeigt haben, um später einen private chat zu realisieren.

Übrigens läuft das tool über TServerSocket und TClientSocket!

aber weiß grade nicht weiter! hier mal der code der Stelle:


Client:
Code:

procedure TFormClient.ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
richeditNachrichten.Lines.Add('Status: verbunden mit ' + socket.RemoteAddress);
//Server eigenen Namen mitteilen
client.socket.SendText(inttostr(edit1.color) + ';' + editusername.text + ';' + '!Connected#');
Timer2.Enabled := true;
end;

procedure TFormClient.ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
begin
richeditNachrichten.Lines.Add('Status: getrennt mit ' + socket.RemoteAddress);
//Eigenen Name wieder aus Liste auf Server löschen
client.socket.SendText(inttostr(edit1.color) + ';' + editusername.text + ';' + '!Disconnected#');
end;


procedure TFormClient.Timer2Timer(Sender: TObject);
begin
Form2.richeditusers.Clear;
//Kontaktliste abrufen
client.Socket.SendText(inttostr(edit1.color) + ';' + editusername.text + ';' + '!GetList#');
end;


procedure TFormClient.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i, iPos1, iPos2, iPos3 :integer;
    sFarbe, sText, sUsername, sIP: String;
begin
    sText := Socket.ReceiveText;

    if Pos('/', Trim(sText)) = 1 then
    begin
      iPos3 := Pos(';', sText);
      sIP := '';
      if iPos3 > 0 then
      begin
        sIP := Copy(sText, 2, iPos3-1);

        if sIP = sEigeneIP then
        begin
          sText := Copy(sText, iPos3+1, Length(sText));
          if Pos('!LIST#', sText) > 0 then
          begin
            sText := Copy(sText, Pos('#', sText) + 1, Length(sText));

            repeat
              if Pos(';', sText) > 0 then
              begin
                Form2.richeditusers.lines.Add(Copy(sText, 1, Pos(';', sText)-1));
                sText := Copy(sText, Pos(';', sText) + 1, Length(sText));
              end
              else
              begin
                Form2.richeditusers.lines.Add(Copy(sText, 1, Length(sText)));
                sText := '';
              end;
            until Length(sText) > 0;

          end;
        end;
      end;
      Exit;
    end;

    iPos1 := Pos(';', sText);
    sFarbe := '';
    if iPos1 > 0 then
    begin
      sFarbe := copy(sText, 1, ipos1 -1);
      delete(sText, 1, iPos1);
    end;

    iPos2 := Pos(';', sText);
    if iPos2 > 0 then
    begin
      sUsername := copy(sText, 1, ipos2 -1);
      delete(sText, 1, ipos2);
    end;

    if (stext <> '') then
    begin

      if sFarbe = '' then
        sFarbe := '0';
      RichEditNachrichten.SelAttributes.Color := strtoint(sFarbe);
    richeditNachrichten.Lines.Add(sUsername + ' -> ' + sText);

    end;
end;

procedure TFormClient.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  Client.Socket.Close;
end;


Und der Server:

Code:
function TFormServerMain.fsGetChatterList : string;
var sList : string;
    iI : integer;
begin
  Result := '';
  sList := '';
  try
    for iI := 0 to ListBoxUser.Count - 1 do
    begin
      if iI = 0 then
        sList := sList + ListBoxUser.Items[iI]
      else
        sList := sList + ';' + ListBoxUser.Items[iI];
    end;
  finally
    Result := sList;
  end;
end;


procedure TFormServerMain.ServerClientRead(Sender: TObject; Socket: TCustomWinSocket);
var i:integer;
    sNachricht: String;
    iPos1: Integer;
    iPos2: Integer;
    iPos3: Integer;
    sFarbe: String;
    sUsername: String;
    sText: String;
    sChatterList : string;
begin
  sChatterList := '';
  sNachricht := Socket.ReceiveText;
  iPos1 := Pos(';', sNachricht);
  if iPos1 > 0 then
  begin
    sFarbe := copy(sNachricht, 1, ipos1 -1);
    delete(sNachricht, 1, iPos1); //sNachricht := Copy(sNachricht,ipos1+1,length(sNachricht));
  end;

  iPos2 := Pos(';', sNachricht);
  if iPos2 > 0 then
  begin
    sUsername := copy(sNachricht, 1, ipos2 -1);
    delete(sNachricht, 1, ipos2);
  end;

  //Name von Client beim Connect erhalten
  if Pos('!Connected#', sNachricht) > 0 then
  begin
    ListBoxUser.Items.Add(Socket.RemoteAddress + '-' + sUsername);
  end
  else
  begin
    if Pos('!Disconnected#', sNachricht) > 0 then
    begin
      for i := 0 to ListBoxUser.Count - 1 do
      begin
        if ListBoxUser.Items[i] = Socket.RemoteAddress + '-' + sUsername then
        begin
          ListBoxUser.Items.Delete(i);
          Exit;
        end;
      end;
    end
    else
    begin
    if Pos('!GetList#', sNachricht) > 0 then
    begin
      //Liste der Chatter versenden
      sChatterList := fsGetChatterList;
      for i := 0 to server.Socket.ActiveConnections - 1 do
      begin
        server.Socket.Connections[i].SendText('/' + server.Socket.Connections[i].RemoteAddress + ';!LIST#' + sChatterList);
      end;
    end
    else
    begin
      for i := 0 to server.Socket.ActiveConnections - 1 do
        server.socket.Connections[i].SendText(sFarbe + ';' + sUsername + ';' + sNachricht);
      end;
    end;
  end;
end;

Ich hoffe jemand nimmt sich die Zeit ^.^ - Danke im vorraus

Geändert von Lyan (31. Aug 2011 um 10:45 Uhr)
  Mit Zitat antworten Zitat
 


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 02:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz