Entwickler-Ecke

Internet / Netzwerk - Kleines problem mit TServerSocket und TClientSocket


Toastbrotbaby - Mi 03.01.07 16:55
Titel: Kleines problem mit TServerSocket und TClientSocket
Moin,

Nachdem ich nun mehrere probs hatte und das irgendwie nie so verbinden wollte und miteinander kommunizieren wollte ich klappte das heute endlich. Keine ahnung wieso aber es ist schon mal ein anfang.

Meine Frage:

mit

Delphi-Quelltext
1:
Form4.ClientSocket1.Socket.SendText(Panel2.Caption)                    


sende ich ja das was in Panel2 steht. soweit ist noch alles klar.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
  var
    MyMessage: String;
begin
  MyMessage := Socket.ReceiveText;
  Log.Lines.Add(MyMessage); 
end;


und die prozedur fängt das ganze ja an dem serverteil ab


nun wird das abgefangene ja in der variable MyMessage gespeichert. Und mein problem in dem fall ist nun das ich aber 2 empfänger variablen brauche da 2 verschiedene informationspakete gesendet werden sollen.

das erste informationspaket soll prinzipiell nur eine information sein die zb dargestellt werden soll.

und das 2. paket soll nach möglichkeit ereignisse steuern. Aber wenn ich dies nun in der selben variable habe würde ja nur eine möglichkeit funktionieren, oder habe ich grad irgendwo einen denkfehler drin.

bin grad echt planlos und mir fällt dazu grad nicht ein wie ich das entsprechend umsetze...

hoffe irgendwer hat ne idee :)

Gruss
Toasti


Narses - Mi 03.01.07 17:35

Moin!

Hier ist ein FAQ-Beitrag [http://www.delphi-library.de/topic_Datenpakete+bei+den+SocketKomponenten+auseinanderhalten_56194.html], der dein Problem noch etwas näher beschreibt, und hier ist die Lösung [http://www.delphi-library.de/topic_TerminatorzeichenProtokollTutorial++1+Sockets+v400_54269.html]. ;)

cu
Narses


Toastbrotbaby - Mi 03.01.07 17:37

So ...

hatte nun doch noch ne kleine idee zwischendurch.

Habe es jetzt so realisiert das einfach die informationen in entsprechender reihenfolge nacheinander gesendet werden müssen und beim server hab ich das ganze per case of dann weiterverarbeitet ...

jetzt werden praktisch nur noch zahlen von 0 - .. gesendet und die informationen werden weiter verarbeitet.

funktioniert, nur halt muss es wohl in der richtigen reihenfolge passieren :)

wenn wer noch was besseres parat hat bin für alles offen

Danke

Gruss
Toasti


Narses - Mi 03.01.07 18:52

Moin!

user profile iconToastbrotbaby hat folgendes geschrieben:
Habe es jetzt so realisiert das einfach die informationen in entsprechender reihenfolge nacheinander gesendet werden müssen

Dabei verwendest du aber nicht die einzelnen OnRead-Ereignisse zum Trennen der Datenpakete, oder? :? Falls doch, dann möchte ich anmerken, dass das nur zufällig klappt; warum, steht im FAQ-Beitrag, s.o. ;)

Viel Erfolg noch,

cu
Narses


Toastbrotbaby - Mi 03.01.07 19:01

nein dabei verwende ich nur das senden von einfachen zahlen die wie in deinem anfänger tut beschrieben gesendet und empfangen werden, in eine variable gespeichert und von dort aus weiter verarbeitet werden ...

ich zeig dir was ich tat ...



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
i: String;
begin
  i := Socket.ReceiveText;
begin
case StrtoInt(i) of
0: Timer1.Enabled := False;
1: Timer1.Enabled := True;
2: label2.Caption := (a);
3: Label2.Caption := (b);
4: Label2.Caption := (c);
5: Label2.Caption := (d);
6: Label2.Caption := (e);
7: Label2.Caption := (f);
8: Label2.Caption := (g);
9: Label2.Caption := (h);
10: Label2.Caption := (j);
11: Label2.Caption := (k);
12: Label2.Caption := (l);
end;
end;
end;


setzt im prinzip das um was ich wollte ... jedenfalls war es eben in einem minitest so ...
ich habs vorerst zum testen so gemacht, hatte bei einem flüchtigen blick die befürchtung das ich mich intensiver mit deinen tutorial beschäftien muss als ich grad den nerv habe, zumal es wie gesagt grad so funzte.

Habe jetzt im Client mehrere Buttons die die Sendeprozedur ausführen und verschiedene werte senden. Sprich 1-12 ... und der server nimmt diese informationen und führt entsprechende ereignisse aus.

Weiss so direkt nicht ob deine variante eleganter ist, aber ich würde spontan behaupten ja ... :)


EDIT: Die Inhalte der Variablen ist in .ini files gespeichert und kann je nach bedarf vorher geladen werden, ansonsten sind erstmal alle variablen mit 00:00:00 versehen

werde mich auf jedenfall morgen mal intensiver mit deinem tut beschäftigen :)

Gruss
Toast


Narses - Mi 03.01.07 19:07

Moin!

user profile iconToastbrotbaby hat folgendes geschrieben:
ich zeig dir was ich tat ...

Der Code oben hat auf jeden Fall das angesprochene Datenpaket-Problem. :| Sorry... :? ;)

user profile iconToastbrotbaby hat folgendes geschrieben:
zumal es wie gesagt grad so funzte.

Wie schon gesagt, nur zufällig. :(

user profile iconToastbrotbaby hat folgendes geschrieben:
werde mich auf jedenfall morgen mal intensiver mit deinem tut beschäftigen :)

Du wirst es sicher nicht bereuen. :D

cu
Narses