Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Text beim Connect mitschicken (https://www.delphipraxis.net/60232-text-beim-connect-mitschicken.html)

1ceman 4. Jan 2006 12:35


Text beim Connect mitschicken
 
hi!
Ich hab nen Kleinen Chat geschrieben(der Funzt auch soweit). Und jetzt möchte ich die User verwalten.
und dazu würde ich gerne wissen, ob man bei connecten des Clients, einen Namen mitschicken kann, den ich
dan beim Event OnClientConnect vom Server abfragen und speichern kann.

1ceman 4. Jan 2006 12:45

Re: Text beim Connect mitschicken
 
So, hab das Problem schon selber gelöst.

Client:
Clientsocket1.Host:=Nickname;

Server (OnClientConnect)
Socket.RemoteHost;

Aenogym 4. Jan 2006 12:47

Re: Text beim Connect mitschicken
 
hi,

ich gehe mal davon aus, dass du die TServerSocket- und TClientSocket-komponenten verwendest.
verschick' deine nachricht doch einfach im OnConnected-Event des Clients ;)

aeno

edit: ähm naja, so, wie du das jetzt löst, mag's vielleicht funktionieren. aber ich persönlich find das nicht schön und glaube, dass es da evtl. noch zu fehlern kommen kann :gruebel:

1ceman 4. Jan 2006 15:27

Re: Text beim Connect mitschicken
 
da glaubst du richtig^^
hab schon fehler bekommen :(
werd ich mal versuchen obs so geht
danke
//edit
muss ich den senden befehl, bei OnConnect oder bei OnConnecting reinschreiben?

1ceman 4. Jan 2006 16:22

Re: Text beim Connect mitschicken
 
Also bei mir geht das irgendwie net.
der schickt den text nicht mit.

Aenogym 4. Jan 2006 16:43

Re: Text beim Connect mitschicken
 
also du musst beim TClientSocket das OnConnect-Event folgendermaßen ausrüsten:
Delphi-Quellcode:
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Socket.SendText('nick:aenogym');
end;
(OnConnect wird ausgeführt, sobald die verbindung steht. OnConnecting wird ausgeführt, nachdem der Server gefunden wurde, aber noch bevor die verbindung aufgebaut ist)

im server musst du dann im OnClientConnect folgendes machen:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var s: string;
begin
  //wenn wir jetzt sofort daten holen, kann es sein, dass der client noch gar nicht soweit ist.
  //ReceiveText() gibt also einen leeren string zurück.
  //mit der while-schleife wird erreicht, dass ReceiveText() so oft ausgeführt wird, bis
  //endlich daten angekommen sind. das application.ProcessMessages() dient dazu, dass
  //unser programm während der schleife nicht "einfriert"
  s := socket.ReceiveText();
  while s = '' do
  begin
    s:=socket.receivetext();
    application.ProcessMessages();
  end;

  showmessage(s);
end;
viel erfolg,
aeno

edit: server-code korrigiert

1ceman 7. Jan 2006 23:41

Re: Text beim Connect mitschicken
 
super vielen dank.geht super, echt gute idee.(hätte ich auch selber drauf kommen können^^)

Muetze1 8. Jan 2006 01:56

Re: Text beim Connect mitschicken
 
Moin!

OMG!!!

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
var s: string;
begin
  //wenn wir jetzt sofort daten holen, kann es sein, dass der client noch gar nicht soweit ist.
  //ReceiveText() gibt also einen leeren string zurück.
  //mit der while-schleife wird erreicht, dass ReceiveText() so oft ausgeführt wird, bis
  //endlich daten angekommen sind. das application.ProcessMessages() dient dazu, dass
  //unser programm während der schleife nicht "einfriert"
  s := socket.ReceiveText();
  while s = '' do
  begin
    s:=socket.receivetext();
    application.ProcessMessages();
  end;

  showmessage(s);
end;
1. ReceiveText kann deine ganze Nachricht gestückelt wiedergeben, daher ist nichtmal gesagt, das ein ReceiveText mit einem Inhalt <> '' das richtige enthält
2. Eine Thread-basierende Kommunikation wieder in ein Polling Abfrage System zu drücken ist wirklich mal eine Leistung.
3. Mit Application.ProcessMessages die GUI bedienbar machen ohne sich vorher um deren ordentlichen Stand zu kümmern, ist auch mies.
4. OnClientRead nutzen - vorher ist keine Nickangabe möglich. Und wenn im Chat erstmal die IP Adresse steht und während der Laufzeit durch den übermittelten Nick ersetzt wird. Schliesslich geschieht das im Normalfall im Bereich von Millisekunden - aber ein Polling im OnClientConnect ist wirklich die Härte.

So, und nun zerreisst euch das Maul über meinen Beitrag, ich bin 2 Tage nicht da...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:05 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