Autor Beitrag
SIR:LEGOLAS
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Do 30.01.03 22:59 
Servus!

Vorerst: Ich kenn mich noch nicht wirklich gut mit delphi aus.

Nun zum Prob:

Ich will ein kleines ChatProg schreiben. Also ich hab ein Server der die daten an alle weiterverschickt. Bisher ist das nur der reine text, der mit Socket.SendText gesendet wird. Nun möchte ich aber noch andere Dinge mit übermitteln wie zum Beispiel den nickname. Wie kann ich das machen? Ich weiss das ich das einfach mit als text senden kann...dann zerlegen usw.

aber gibt es nich ne "elegantere" lösung? ZumBeispiel ein Array übermitteln? oder halt eine oder mehrere variablen...auf die ich dann wieder zugreifen kann....?

danke schon mal für die hilfe

mfg

lego
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 31.01.03 02:29 
Also ich hab das damals folgendermaßen gelöst.

Ich hab zwei VOrzeichen reserviert, z.B. & und %, das eine war für Übertragungsbefehle, grad für nickname usw, das andere für User-Befehle. Wenn ein Rechner einen String gekriegt hat, wurde der erstmal durch den Parser gejagt, wenn der einen Befehl gefunden hat, wurde die entsprechende Funktion gestartet, andernfalls gings als Text raus....

Aber wenn Du's wirklich elegant machen willst und relativ einfach, dann nimm doch XML. Da kannste komplette Strukturen in einem einzigen String übertragen. Hab mir mal überlegt, ob ich das machen soll, bin aber noch net dazu gekommen *g*

Gruß
cirrus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Sa 01.02.03 14:10 
oder du versuchst es mit nem record, wie z.b.

ausblenden Quelltext
1:
2:
3:
4:
5:
type 
  TransferPackt=record
     Command: integer;
     Data: array[0..1023] of byte;  //größe is beliebig
end;


in Command kannst du dann den eigentlichen Befehl speichern und in Data halt jede beliebige Information (max. 1024 bytes).
Das ganze kannst du denn per SendBuffer über die Sockets jagen.

gruss

cirrus

_________________
Wenn die Nacht am tiefsten ist der Tag am nächsten
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Sa 01.02.03 16:25 
Soweit ich weiß, kann man doch nur Zeichnfolgen über einen Socket versenden? Wie schickst Du da einen Record? Das musste mir mal genauer erklären.

Und weil ich dieser meinung bin, hab ich ja das Beispiel mit XML gemacht, da kannste ja dann so eine Art Record übermitteln.

Gruß
cirrus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Sa 01.02.03 17:20 
mit SendBuffer kannst du variablen beliebigen typs über die sockets schicken

_________________
Wenn die Nacht am tiefsten ist der Tag am nächsten
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Sa 01.02.03 18:35 
Aber dann muss ja der Typ der Gegenstelle genau bekannt sein....
OK, dann nehm ich ein Teil meiner Meinung zurück *g*

Gruß
cirrus
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 49



BeitragVerfasst: Sa 01.02.03 18:39 
ja das ist die vorraussetzung...

lol...wir wolln uns doch nich streiten ;D

_________________
Wenn die Nacht am tiefsten ist der Tag am nächsten
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Sa 01.02.03 18:48 
OK, einigen wir uns auf unentschieden *g*.

Nene, im Ernst, ich denke, das Forum ist ja auch dazu da, dass man selber, wenn man denkt, man weiß es, darauf aufmerksam gemacht wird, dass man nicht ganz richtig liegt. Is gut wenn mans gesagt, bekommt.

Also, nochn schönes WE.
SIR:LEGOLAS Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 02.02.03 14:52 
okay....das mit dem record werd ich mal versuchen...momentan bin ich noch an der sache mit dem text dran. Ich hab halt angefangen nen parser zu basteln. nu hab ich aber ein neues Problem. Wenn der Client connectet, dann soll sein name in der Userliste hinzugefügt werden. In der eigenen ist das kein Prob. Ich wollte also den nick zum server übertragen, damit der den an die andern clients verteilt. Also hab ich in meiner Connect procedur einfach den String '/Login|NickName' an den Server gesendet. der parser schaut ob das erste zeichen ein / ist...und wertet dann die befehle aus. in dem fall schaut der dann, wenn er den Login befehl erhält, was nach dem | kommt und soll das dann der Userliste hinzufügen. Soweit so gut. Der Client sendet den String beim Connecten, und beim server wird beim OnClientConnect-Ereignis der String ausgwertet. Aber wenn ich das mache, dann stürzt der Server ab, sobald der client connectet. das gleiche passiert bei OnConnect, und OnAccepted...

Wenn ich in eine der prozeduren das hier reinschreibe:

ParseCommands(Server.Socket.RecieveTExt); //ParseCommand is die Parser prozedur.

Wie muss ich das denn machen, damit der den Befehl direkt beim Verbinden sendet und der Server ihn erkennt ohne abzustürzen?

danke schon mal....
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 02.02.03 17:27 
Ich hab das damals nicht in der Connect-Proz gemacht, habs dann bei, Connected-Event einfach als Text geschickt.

Wenn Du willst, kann ich mein altes angefangenes Chat-Proggy mal schicken, dann siehstes. Das Teil ist halt nur angefangen, nie richtig fertiggemacht, aber die grundsätzliche Struktur kann man glaub ich schon erkennen.

Gruß