Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Terminatorzeichen-Protokoll-Tutorial / Teil 1 (Sockets)
spacer
Autor Nachricht
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Fr 22.09.06 00:44  Antworten mit Zitat Beitrag melden
Moin!

Es gibt eine neue Version: V4.00-Milestone-Edition- vom 22.09.2006!

Es ist fast alles neu! ;) Da dieses Tutorial sich konkret an Anfänger in Sachen Netzwerk richtet, waren die Vorgängerversionen (leider :() schon mit viel zu viel Detailproblemen und deren ausufernden Lösungen vollgestopft. Das hatte natürlich den gegenteiligen Effekt, wie beabsichtigt: Abschreckung, statt leicher Einstieg. :D Deshalb wieder back-to-the-roots, nur das notwendigste in Kürze, aber mit Würze! ;) Also, wer bisher von den Vorgängerversionen eher abgeschreckt war, sollte nochmal reinschauen, das ganze Thema ist jetzt sehr viel einfacher präsentiert und garantiert einen weiteren Blick wert! :zwinker:

Für die schon etwas fortgeschritteneren Leser, die jetzt spezielle Themen (wie den Binärdatentransfer) vermissen: Es geht nichts aus den Vorgängerversionen verloren, ich werde die jetzt fehlenden Teile im zweiten Teil - ebenfalls in verbesserter Form - wieder präsentieren. Noch etwas Geduld, bitte. ;)

Details und Download - wie immer - im ersten Beitrag des Threads.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.


Zuletzt bearbeitet von Narses am Do 19.10.06 23:43, insgesamt 1-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Fr 13.10.06 14:01  Antworten mit Zitat Beitrag melden
Moin!

Der angekündigte, 2. Teil des Tutorials ist jetzt fertig. ;)

Viel Erfolg damit. :D

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
freddiiii
Hält's aus hier

Beiträge: 2
Dabei seit: 23.10.2006



BeitragVerfasst: Di 24.10.06 08:43  Antworten mit Zitat Beitrag melden
Hervorangendes Tutorial :)
Hat bisher gut bei meinen Anfängerproblemen geholfen un wird auch nochn paar offene Fragen klären denk ich mal!
Einfach top..
Und hingegen vieler anderen Leute is Narses auch noch sehr hilfsbereit gegenüber Anfängern die weitergehende Fragen haben oder Tips brauchn :)

fred
Private Nachricht sendenPosting in privater Nachricht zitieren
-Pl-
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 22
Dabei seit: 19.01.2006
Wohnort: Hamburg

Win XP, Win Vista
Delphi 7
BeitragVerfasst: Di 30.01.07 14:19  Antworten mit Zitat Beitrag melden
Da hammer den Thread ja .. ;-)

Einfach super Tutorial ! Habe jetzt auch nochmal die neue Version durchgelesen, frei nach dem Motto, doppelt hält besser und kann das Tutorial einfach nur weiterempfehlen. Vorallem für diejenigen unter euch die noch nicht so die Erfahrung mit Internet/LAN bei Delphi haben. Super Einführung und Erklärung und man kann selber immernoch sehr gut drauf aufbauen und sich neue Dinge dazu überlegen, nicht zuletzt durch die immer wieder eingefügten Denkanstöße in diese Richtung.

Nochmal vielen Dank Narses !
Private Nachricht sendenPosting in privater Nachricht zitieren
catweasel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 421
Dabei seit: 20.06.2002


Win XPpro
Delphi 6 Enterprise
BeitragVerfasst: Mi 16.05.07 15:43  Antworten mit Zitat Beitrag melden
Hi,

wow. Wirklich tolles tut...
Mir is nur auf die schnelle ein kleiner Typo aufgefallen....
Auf Seite 35 bei Punkt b heisst es : ... ist keiner als die eigene....
... muesste heissen ... "ist kleiner als die eigene".

also nix fuer ungut.. ;-)
Catweasel

_________________
Pommes werden schneller fertig wenn man sie vor dem Frittieren einige Minuten in siedendes Fett legt.
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Sa 19.05.07 22:39  Antworten mit Zitat Beitrag melden
Moin!

catweasel hat folgendes geschrieben:
wow. Wirklich tolles tut

Danke. :D

catweasel hat folgendes geschrieben:
ein kleiner Typo aufgefallen

Habe ich schon korrigiert, aber dafür lohnt (noch) kein Update; trotzdem Danke für den Hinweis. ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
Hendi48
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 269
Dabei seit: 02.04.2007


Windows Vista Ultimate
Delphi 2009 Architect, Visual Studio 2008 Prof.
BeitragVerfasst: Do 21.06.07 20:57  Antworten mit Zitat Beitrag melden
kann man auch irgendwie den server in der Userliste anzeigen lassen? Also mein Server heißt nich system sondern ich kann einen namen eingeben (edit1). Wenn ich unter
ausblenden Delphi-Quelltext markieren
1:
Clients.AddItem(Socket.RemoteHost,Socket); // in die Liste

ausblenden Delphi-Quelltext markieren
1:
Clients.AddItem(edit1.text,Socket); // in die Liste

tu, bekomm ich ne access violation und im client kommt alles doppelt
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Do 21.06.07 22:20  Antworten mit Zitat Beitrag melden
Moin!

Hendi48 hat folgendes geschrieben:
kann man auch irgendwie den server in der Userliste anzeigen lassen?

Grundsätzlich kann man eine ganze Menge machen, die Frage ist, wieviel Aufwand das ist. :zwinker: Aber um die Frage kurz zu beantworten: nein, das geht nicht so ohne weiteres. :| (jedenfalls nicht, ohne den Rahmen des Tutorials oder auch nur eines Beitrags hier zu sprengen)

Der Server ist eben kein Client und hat als solcher nix in der Client-Liste zu suchen; das ist bei anderen Chat-Systemen ja auch nicht anders, oder steht bei dir der ICQ-Server mit in der Kontaktliste... 8) :mahn:

Hendi48 hat folgendes geschrieben:
Also mein Server heißt nich system sondern ich kann einen namen eingeben (edit1). Wenn ich unter
ausblenden Delphi-Quelltext markieren
1:
Clients.AddItem(Socket.RemoteHost,Socket); // in die Liste

ausblenden Delphi-Quelltext markieren
1:
Clients.AddItem(edit1.text,Socket); // in die Liste

tu, bekomm ich ne access violation und im client kommt alles doppelt

Das ist ja auch "falsch" (Server ist kein Client und hat in der Liste nix zu suchen), deshalb gibt´s hier korrekterweise Fehlermeldungen. :?

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
Hendi48
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 269
Dabei seit: 02.04.2007


Windows Vista Ultimate
Delphi 2009 Architect, Visual Studio 2008 Prof.
BeitragVerfasst: Do 21.06.07 23:07  Antworten mit Zitat Beitrag melden
ok stimmt, jetz wo dus sagst :oops:
Egal dann geh ich eben auch als Client rein :wink:
Private Nachricht sendenPosting in privater Nachricht zitieren
jackle32
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 133
Dabei seit: 13.08.2007


Win XP, Win 2k
Delphi 7 Pro, C, C++
BeitragVerfasst: Fr 17.08.07 23:54  Antworten mit Zitat Beitrag melden
Hallo erst mal,

ich hab mal ein ganz grundsätzliche Frage zu den Sockets. Worin besteht jetzt genau der Unterschied zwischen den T-Socket und den TCP-Socket? Würde der Chat auch laufen wenn ich jetzt einen TCP-Socket her nehm, den den gleichen Namen gebe (also z.B. "ClientSocket1")? Soll heißen sind die Befehle idtentisch oder anders und wenn sich die Sockets unterscheiden, wann nehm ich welchen für was? Zumal ich irgendwo gelesen hab, dass die T-Sockets von Borland als "bugy" eingestuft werden.

Hoffe ich bin im richten Thread und auf baldige Antwort

Gruß

Jack
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Mo 20.08.07 00:12  Antworten mit Zitat Beitrag melden
Moin!

jackle32 hat folgendes geschrieben:
Worin besteht jetzt genau der Unterschied zwischen den T-Socket und den TCP-Socket?

Es sind gänzlich unterschiedliche Komponenten, näheres verrät dir die Delphi-Online-Hilfe. :les: ;)

jackle32 hat folgendes geschrieben:
Würde der Chat auch laufen wenn ich jetzt einen TCP-Socket her nehm

Nein (unter der Annahme, dass du für TClientSocket einen TTCPClient verwenden möchtest).

jackle32 hat folgendes geschrieben:
wenn sich die Sockets unterscheiden, wann nehm ich welchen für was?

Das mußt du selbst entscheiden, indem du dir beide Komponenten mal intensiv anschaust; ich kann dir dabei leider nicht helfen. :?

jackle32 hat folgendes geschrieben:
Zumal ich irgendwo gelesen hab, dass die T-Sockets von Borland als "bugy" eingestuft werden.

Die Socket-Kompos sind etwa genau so bugy, die andere WSA-API-Wrapper auch; man muss sie halt zu nehmen wissen. :) Sie sind zugegeben "veraltet" (was auch immer das nun genau bedeuten mag :nixweiss:) und bieten keine höhere (Standard-)Protokollunterstützung, wie z.B. die Indy-Komponenten. Zum Einstieg (also zum Lernen) sind diese Komponenten allerdings relativ gut geeignet, weil man eben alles selbst machen muss und so auch viel lernen kann. :idea:

Weitere (Grundsatz-)Fragen (zu den Komponenten) aber bitte im Forum stellen; das hier ist die Library und speziell der Thread zu einem ganz konkreten Tutorial - und da hat diese Diskussion eigentlich nix zu suchen (gab übrigens auch schon ein paar Threads zu diesem Thema, einfach mal suchen); ich habe auch nur deshalb (hier) darauf geantwortet, weil du nach einer Ersatzmöglichkeit zum Einsatz im Chat gefragt hast.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
PeterPain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star

Beiträge: 81
Dabei seit: 29.11.2007



BeitragVerfasst: Fr 30.11.07 00:13  Antworten mit Zitat Beitrag melden
Hi Narses!

Deine Tutorials sind ja mal mehr als genial. Auch wenn ich sie nicht benötige habe ich sie gerne gelesen und möchte gesagt haben, dass ein derartiges Engagement, und das auch noch für lau (oder bezahlt man dich dafür?) wirklich mehr als Vorbildich ist! Weiter so :)

Gaanz grosses Kino!

Viele grüsse, peter
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Fr 30.11.07 00:32  Antworten mit Zitat Beitrag melden
Moin!

PeterPain hat folgendes geschrieben:
Deine Tutorials sind ja mal mehr als genial.
Vielen Dank! :D

PeterPain hat folgendes geschrieben:
oder bezahlt man dich dafür?
Das tut man zwar, aber nicht hierfür. :rofl: Ich habe die Tutorials natürlich nicht ausschließlich für´s Forum geschrieben, da gab´s auch noch andere Gründe... ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
morvister
Hält's aus hier

Beiträge: 15
Dabei seit: 30.07.2008
Wohnort: Wolfsburg

XP
Delphi 2005 Prof.
BeitragVerfasst: Do 31.07.08 23:32 
Titel: Meldung im Server-Protokoll: <NICK> hat sich angemeldet
Antworten mit Zitat Beitrag melden
Hallo Narses,

Ich bin relativ unbedarft was Delphi angeht, mit Programmierung an sich kenne ich mich aber aus, leider kaum mit der OOP. Soviel zu meinem Kenntnisstand. Ich interessiere mich für die Techniken, ein netzwerkfähiges Spiel mit relativ geringem Datentransfer zu erstellen und habe mich daher mit Freuden auf dieses wirklich hervorragende Tutorial gestürzt.

Die Chat-Anwendung läuft soweit und ich denke, ich habe das meiste im Großen und Ganzen verstanden. Lediglich das Zusammenspiel der TCmdToken- und der Syntax-Komponente bereiten mir noch etwas Probleme was das Verständnis angeht. Liegt vermutlich an mangelnder Kenntnis über Delphi und seiner Syntax.

Meine eigentliche Frage aber dreht sich um die Nicknamen. Ich wollte ein wenig herumprobieren und hatte die Idee, beim Verbinden eines Clients mit dem Server ins Protokoll des Servers so etwas wie "Neuer Client verbunden: <NICK>" auszugeben.
Meiner Meinung gehört das in die "OnClientConnect"-Methode der Server-Socket-Komponente.

Mein 1. Versuch war das hier:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   Clients.AddItem(Socket.RemoteHost,Socket);                     //in die Liste
   ReceiveBuffer.Add('');                                         //zugehörigen Empfangspuffer anlegen
   Log.Lines.Add('Neuer Client verbunden: '+ Socket.RemoteHost);  //Meldung im Server-Protokoll
   SendUserList;
end;
Die Meldung wurde erzeugt, allerdings mit 'localhost' und nicht dem Nicknamen, wie ich es vermutet hatte. Eigentlich ist das auch sehr verständlich, aber ich frage mich, wie du es dann geschafft hast, mit dem 1. Befehl der Procedure den NICK in die Client-Liste einzutragen, wenn in Socket.RemoteHost 'localhost' steht, und nicht etwa der Nick.

Nach diesem Fehlschlag habe ich mich entschlossen, direkt auf die ListBox zu gehen.

Ein Versuch mit der Log.Lines.Add-Zeile wie oben, nur statt Socket.RemoteHost dann
ausblenden Delphi-Quelltext markieren
1:
Clients.Items.Strings[Clients.Items.Count-1]);


Ein weiterer Versuch mit Clients.Items.Strings[Clients.Items.IndexOfObject(Socket)]) statt Socket.Remote in derselben
Zeile.

Immer kommt dabei raus: "localhost"

Aber, wenn selbst in der Liste "localhost" statt des Nicknamens steht, wieso werden dann die Nicks angezeigt?

Mein Programm sieht exakt so aus, wie es gemäß Deines Tutorials aussehen müsste. Ich habe es inkl. des Änderns des Nicks mittels BtnSetNick erfolgreich durchgearbeitet. Da kam mir dann die Idee mit dieser Meldung.

Kannst Du mir helfen?

Sorrry der Quellcode ist etwas unübersichtlich. Ich bin neu hier und hab keine Ahnung, wie man die Quelltexte IDE-konform hier hinein bekommt.

Gruß
morvi

Moderiert von Narses: Delphi-Tags hinzugefügt
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Do 31.07.08 23:55 
Titel: Re: Meldung im Server-Protokoll: <NICK> hat sich angemeldet
Antworten mit Zitat Beitrag melden
Moin und :welcome: im Forum!

morvister hat folgendes geschrieben:
Meine eigentliche Frage aber dreht sich um die Nicknamen. Ich wollte ein wenig herumprobieren und hatte die Idee, beim Verbinden eines Clients mit dem Server ins Protokoll des Servers so etwas wie "Neuer Client verbunden: <NICK>" auszugeben.
Meiner Meinung gehört das in die "OnClientConnect"-Methode der Server-Socket-Komponente.
Grundsätzlich gehörte es wohl vielleicht da hinein, allerdings steht zu diesem Zeitpunkt der Nickname des neuen Clients ja noch gar nicht fest. :idea:

morvister hat folgendes geschrieben:
Mein 1. Versuch war das hier:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   Clients.AddItem(Socket.RemoteHost,Socket);                     //in die Liste
   ReceiveBuffer.Add('');                                         //zugehörigen Empfangspuffer anlegen
   Log.Lines.Add('Neuer Client verbunden: '+ Socket.RemoteHost);  //Meldung im Server-Protokoll
   SendUserList;
end;
Die Meldung wurde erzeugt, allerdings mit 'localhost' und nicht dem Nicknamen
Zur Klärung: mit Socket.RemoteHost bekommst du den Hostnamen der Gegenstelle, wenn der Server und der Client auf der gleichen Maschine laufen, also korrekterweise 'localhost'.

morvister hat folgendes geschrieben:
ich frage mich, wie du es dann geschafft hast, mit dem 1. Befehl der Procedure den NICK in die Client-Liste einzutragen, wenn in Socket.RemoteHost 'localhost' steht, und nicht etwa der Nick.
Des Rätsels Lösung ist hier im Client-Code:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
// Befehle ausführen; die notwendige Anzahl Argumente ist garantiert
procedure TForm1.Execute(const Command: TCmdToken; Data: TStringList);
  var
    i: Integer;
begin
  case Command of // Befehle fallunterscheiden:
    //...
    cmdVER: // Erweiterung 4: Protokoll-Version des Servers auswerten
      // ist das ein Narses-Chat-Server? (will ich mit dem reden?)
      if (Data.Strings[1] = SRV_APP_ID) then // ja
        // passende Protokoll-Version? (kann ich mit dem reden?)
        if (Data.Strings[2] = PROTO_VER) then begin // ja
          // der Server ist OK; im Log vermerken und Nickname senden
          Log.Lines.Add(Data.Strings[1]+', PV: '+Data.Strings[2]+'.'+Data.Strings[3]);
          ClientSocket1.Socket.SendText(Syntax[cmdNICK].Text+#13+Nickname.Text+#13);
Der Nickname wird als "Antwort" auf die Versionskennung des Servers gesendet (das Ganze ist Teil der Connect-Ereigniskette). :idea:

morvister hat folgendes geschrieben:
Immer kommt dabei raus: "localhost"
Ich denke, dir sollte jetzt klar werden, warum. ;)

morvister hat folgendes geschrieben:
Ich bin neu hier und hab keine Ahnung, wie man die Quelltexte IDE-konform hier hinein bekommt.
Markiere einfach den entsprechenden Abschnitt/Quelltext im Editor und klicke dann auf das '+'-Zeichen neben dem "Delphi" in der Combobox für den Syntaxhighlighter.

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
morvister
Hält's aus hier

Beiträge: 15
Dabei seit: 30.07.2008
Wohnort: Wolfsburg

XP
Delphi 2005 Prof.
BeitragVerfasst: Fr 01.08.08 00:49  Antworten mit Zitat Beitrag melden
Zunächst mal vielen Dank für die schnelle Antwort :-)

Ich habe die Protokoll-VersionsPrüfung bei mir noch gar nicht eingebaut. Ich habe das Tutorial erst bis 4.2 "ändern des Nicknamen im Betrieb" durchgearbeitet und auf dem Stand sieht die OnClientconnect-Prozedur (ohne meine Sonderlocke mit der Meldung übre neue Verbindung, daher auskommentiert quasi so aus:

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   Clients.AddItem(Socket.RemoteHost,Socket);   //in die Liste
   ReceiveBuffer.Add(''); //zugehörigen Empfangspuffer anlegen
   // <- Hier wollte ich die Log.Lines.Add-Anweisung einbauen, wie folgt:
   //Log.Lines.Add('Neuer Client verbunden: '+
      Clients.Items.Strings[Clients.Items.Count-1]);
   SendUserList;   //User-Liste an alle Clients senden
end;


Ich bin nun aufgrund des Aufrufs von SendUserList am Ende der Procedure davon ausgegangen, dass die User-Liste zu diesem Zeitpunkt schon aktuell sein muss, und zwar durch Clients.AddItem(Socket.RemoteHost.Socket) sonst würds ja nix bringen, sie durch den Äther zu jagen :)

Ich hab sicher irgendwo nen Denkfehler oder ich habe die Reihenfolge der Ereignisse noch nicht aufm Schirm...Ich habs so verstanden, dass das OnConnect-Ereignis auf der Client-Seite, welches in meinem Fall so aussieht:
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
//Verbindung zum Server ist aufgebaut und bereit zum Senden/Empfangen
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   ReceiveBuffer := '';    //Empfangspuffer initialisieren
   ConnectionState := mcsOnline;   //Buttons anpassen
   Log.Clear;
   Log.Lines.Add('Verbunden mit: '+ClientSocket1.Socket.RemoteHost);
   Socket.SendText('NICK'+#13+Nickname.Text+#13); //noch den eigenen Nick senden
end;


das OnClientConnectEreignis auf der Server-Seite auslöst. Wenn dem so wäre, wäre die Info über den Nicknamen auf der Servcerseite vorhanden. Und vorhanden muss sie ja auch sein, wegen des Aufrufs von  SendUserList :gruebel:

Kannst Du mir helfen, den Knoten zu lösen?
Gruß
morvi
Private Nachricht sendenPosting in privater Nachricht zitieren
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

(Threadstarter)

Beiträge: 7323
Erhaltene Danke: 7
Dabei seit: 25.07.2004
Wohnort: Gelsenkirchen

W2k, WXPpro
D6pe, D7pro
BeitragVerfasst: Fr 01.08.08 01:01  Antworten mit Zitat Beitrag melden
Moin!

morvister hat folgendes geschrieben:
Ich habe die Protokoll-VersionsPrüfung bei mir noch gar nicht eingebaut.
OK, ich hab einfach mal den letzten Code-Checkpoint genommen, weil du angedeutet hast, das Tut fertig zu haben. :nixweiss:

morvister hat folgendes geschrieben:
Ich bin nun aufgrund des Aufrufs von SendUserList am Ende der Procedure davon ausgegangen, dass die User-Liste zu diesem Zeitpunkt schon aktuell sein muss, und zwar durch Clients.AddItem(Socket.RemoteHost.Socket) sonst würds ja nix bringen, sie durch den Äther zu jagen
Nein, die Userliste enthält hier noch nicht den Nicknamen und nochmal nein, es bringt eine aktuelle Userliste, allerdings noch ohne den korrekten Nicknamen. ;)

morvister hat folgendes geschrieben:
ich habe die Reihenfolge der Ereignisse noch nicht aufm Schirm...
Wer auch immer welches Ereignis im TCP-Connecting triggert, der Nickname kommt auf jeden Fall erst im OnReceive rein und wird demzufolge im Execute-Ereignis verarbeitet. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Private Nachricht sendenPosting in privater Nachricht zitieren
morvister
Hält's aus hier

Beiträge: 15
Dabei seit: 30.07.2008
Wohnort: Wolfsburg

XP
Delphi 2005 Prof.
BeitragVerfasst: Fr 01.08.08 06:51  Antworten mit Zitat Beitrag melden
Moin

Danke, ich denke, diese Aussagen waren zum "Knoten lösen" geeignet :wink:

Und sorry für meine irreführenden Aussagen bzgl. des Stands Deines Tuts bei mir...es war wohl schon etwas zu spät :oops:

Besten Dank nochmal
Private Nachricht sendenPosting in privater Nachricht zitieren
Stinger47
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star

Beiträge: 102
Dabei seit: 22.02.2006



BeitragVerfasst: Do 20.08.09 14:07  Antworten mit Zitat Beitrag melden
Heyho,
auch von mir erstmal ein großes lob an das tut...für einen einsteiger wie mich in dieser matherie wirklich verständlich geschrieben...:)
aber irgendetwas will bei mir einfach nicht funktionieren :bawling:
habe das tut bis zu CC2 durchgearbeitet und soweit alles verstanden nochmal selber nachprogrammiert ohne pdf...
aber eins will einfach nicht
wenn ich mich mit dem client verbinde erscheinen in dem log nur chinesische! zeichen
beim text senden sowohl vom server als auch vom client kommt nur die fehlermeldung "unbekanntest kommando: [wieder chinesische zeichen]"
die userliste wird nicht aktualisiert wieder nur chinesische murks
bei den fertig kompilierten exe-dateien funktioniert es...
compiliere ich deinen code aber neu kommt dort der selbe fehler wie bei mir...
liegt es an meinem delphi?
habe letzten von einem bekannten delphi 2009 bekommen...
habe vista 64 bit
liegt es am delphi?..windows? :?!?:

Grüßle
Private Nachricht sendenPosting in privater Nachricht zitieren
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Nussknacker 2009 - 1. Rang

Beiträge: 8014
Erhaltene Danke: 15
Dabei seit: 16.07.2004
Wohnort: Jahnsdorf

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, L0.9\FPC2.0
BeitragVerfasst: Do 20.08.09 14:11  Antworten mit Zitat Beitrag melden
Narses arbeitet mit AnsiStrings (in früheren Versionen String); seit D2009 wird für String standardmäßig WideString genommen. Änder alle Vorkommen von String nach AnsiString und probier das nochma ... Ansonsten mal kurzen Source online stellen.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home