Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Frage zu ServerSocketClientRead (https://www.delphipraxis.net/71956-frage-zu-serversocketclientread.html)

Kenshin 22. Jun 2006 23:09


Frage zu ServerSocketClientRead
 
ich habe eine frage wie man folgendes bewerkstelligt..

also

der client verschickt erstmal normal text an den server

mit dem ereignis schreibt der server den erhaltenen text in ein memo...
Delphi-Quellcode:
procedure TfrmServer.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  Memo1.Lines.Add(Socket.ReceiveText);
end;
schön und gut..

wenn ich danach aber zum bsp ein record versende..oder sonstwas..

wie soll der server das denn empfangen..wenn im clientread ereignis ja schon steht das er das erhaltene in ein memo schreiben will

oder noch besser..

man verschickt 2 records..nacheinander..einmal...spieler1,dann spieler2 mit jew..bestimmten eigenschaften

wie macht man nun im dem clientread ereignis das soo
das beim server..die records.. dort auch in spieler1 und spieler2 geschrieben werden..
das muss dann ja irgendwie eine reihenfolge haben..

im klartext:

wenn der client records verschickt... spieler1,spieler2....strassen(40 teile grosses array vom typ eines records)
wie mache ich das dan so..das der server im clientread ereignis diese records in seine eigenen spieler1,spieler2 records reinschreibt

also deplhi code mässig würde das so aussehen..

Delphi-Quellcode:
ClientSocket1.Socket.Sendbuf(spieler1,sizeof(spieler1));
        ClientSocket1.Socket.Sendbuf(spieler2,sizeof(spieler2));
        ClientSocket1.Socket.Sendbuf(strassen,sizeof(strassen));
Delphi-Quellcode:
procedure TfrmServer.ServerSocketClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
  ??
end;
und das ganze muss ja während der laufzeit bei jedem zug gemacht werden...und das sind nur die records..es müssen ja noch viele andre daten versendet werden..

hilfe ^^

Muetze1 23. Jun 2006 00:16

Re: Frage zu ServerSocketClientRead
 
Grundlegend: Du brauchst ein Protokoll. Du musst dir ein Protokoll ausdenken damit du die Daten unterscheiden kannst und somit immer weisst was als nächstes kommt bzw. wie du die Daten zu handeln hast. Dabei ist u.a. auch wichtig zu wissen wie lang ein solcher Datenblock ist zum abtrennen der Blöcke. Da kannst du aber deiner Fantasie freien Lauf lassen.

Kenshin 23. Jun 2006 10:55

Re: Frage zu ServerSocketClientRead
 
dann werd ich mich wohl mit dem thema protokolle befassen müssen..

danke

pacman1986 23. Jun 2006 10:59

Re: Frage zu ServerSocketClientRead
 
es gibt noch die primitive möglichkeit alles in ein weiteren record zu packen und zu verschicken.

Kenshin 23. Jun 2006 11:03

Re: Frage zu ServerSocketClientRead
 
Zitat:

Zitat von pacman1986
es gibt noch die primitive möglichkeit alles in ein weiteren record zu packen und zu verschicken.

*gg* ^^ das wäre natürlich auch eije möglichkeit
ich versuch aber erst mal elegant ^^wenn ich das nicht hinkriege werd ichs so machen ^^

@ mützel..weisst du irgendwo ein tutorial..oder irgendwas wo man sich das mit den protokoll ansehen kann..an einem bsp

Tommy 23. Jun 2006 16:38

Re: Frage zu ServerSocketClientRead
 
"oder irgendwas wo man sich das mit den protokoll ansehen kann"
du denkst dir einfach eins aus?!

sendest halt erst nen Text + Größe des Records, z.Bsp.:
Delphi-Quellcode:
ClientSocket1.SendText('1 ' + sizeof(recordzeugs)); //1 für Spieler, sizeof() für die Länge
ClientSocket1.SendBuffer(recordzeugs, sizeof(recordzeugs));
und das liest du halt mit dem anderen aus - die Länge hab ich nur, damit du weist, wie viel dazugehört...
(bei Non-Blocking können Nachrichten ja auch zerstückselt oder zusammen mit anderen kommen...)

so in etwa müsste das hinhauen?!

Weiß nicht, ob es so toll ist, das alles in ein Record zu hauen, kommt drauf an, wie groß die Records sind - wenn eins nur nen paar Byte ist, ist das vll so gar besser, aber bei nen paar KB oder MB (^^) solltest du es vll unterlassen, jedesmal wieder alles neuzusenden, wenn es auch die Hälfte tun würde... ^^

Ciao Tom


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