AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi idtcpserver - herausfinden was empfangen wird
Thema durchsuchen
Ansicht
Themen-Optionen

idtcpserver - herausfinden was empfangen wird

Ein Thema von scrat1979 · begonnen am 27. Jul 2007 · letzter Beitrag vom 29. Jul 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#1

idtcpserver - herausfinden was empfangen wird

  Alt 27. Jul 2007, 12:00
Hallo zusammen,

Ich schicke über einen Client gerade einen String mittels
tcpclient.socket.Writeln('Text'); ... und empfange ihn im Server im OnExecute-Ereignis mittels
 RecvString := idTCPServer.AContext.Connection.IOHandler.ReadLn; Das klappt auch wunderbar. Es ist ja aber auch möglich über andere Write-Befehler beim Client Integer und Streams etc. zu verschicken. Da würde ja meine Routine versagen, da ja nur STrings eingelesen werden. Gibt es eine Möglichkeit vor dem eigentlichen Empfangen zu PRüfen ob gerade ein String, INteger, Stream ankommt und so den entsprechenden Read-Befehl beim SErver zu benutzen?

Danke im Voraus,
SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: idtcpserver - herausfinden was empfangen wird

  Alt 27. Jul 2007, 17:51
Hallo,

Struktur und Umfang des Datenaustauschs regelt ein Protokoll. Was hast du denn vor?

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#3

Re: idtcpserver - herausfinden was empfangen wird

  Alt 27. Jul 2007, 17:56
Klar, du kannst generell alles versenden.

Mein Balanced versendet mit dieser Methode die Levels für die Multiplayer ( zum verhindern des Cheatens ... )


Dieses Sample was ich aber nur aus nem anderen Sample zusammengestelt habe versendet z.b. Dateien.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#4

Re: idtcpserver - herausfinden was empfangen wird

  Alt 27. Jul 2007, 19:22
Hi
Narses hat im DF zu Protokollen in der Anwendungsschicht einige Tutorials geschrieben, die ich nicht schlecht finde. Wenn du sie noch nicht kennst findest du hier den Einstieg: http://www.delphi-library.de/topic_60744.html

Gruß
alias5000
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: idtcpserver - herausfinden was empfangen wird

  Alt 28. Jul 2007, 17:39
Danke Euch,

ich werde mich mal mit den Links auseinandersetzen. Ich möchte eben je nach empfangenen Daten (Integer, String, Stream) andere Befehle ausführen.

In Pseudocode:

Delphi-Quellcode:
if empfangene_daten = string dann mache dies...
if empfangene_daten = integer dann mache jenes...
SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#6

Re: idtcpserver - herausfinden was empfangen wird

  Alt 28. Jul 2007, 19:10
das sollte ohne weiteres nicht unbedingt möglich sein. Weil du versendest ja im Prinzip nur bits und bytes. Integer oder string ist da drauf ja eigentlich nur ne WEise, wie diese empfangenen Daten interpretiert werden. Ich würde dir dringend zu einem (wenn vllcht auch einfachen) Protokoll raten

Gruß
alias5000
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: idtcpserver - herausfinden was empfangen wird

  Alt 28. Jul 2007, 22:05
Zitat von alias5000:
das sollte ohne weiteres nicht unbedingt möglich sein. Weil du versendest ja im Prinzip nur bits und bytes. Integer oder string ist da drauf ja eigentlich nur ne WEise, wie diese empfangenen Daten interpretiert werden. Ich würde dir dringend zu einem (wenn vllcht auch einfachen) Protokoll raten

Gruß
alias5000
Das habe ich mir schon gedacht (oder befürchtet). Werde mir mal die o.g. Tutorials anschauen, die sehen schon einmal sehr vielversprechend aus. Die meisten behandeln leider TClientSocket und TServerSocket, ich verwende ja Indy in der Version 10, die ja leider wiederum relativ sehr von der 9'er abweicht. Naja, falls es Probs gibt melde ich mich wieder

SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von alias5000
alias5000

Registriert seit: 10. Sep 2005
Ort: Heilbronn
268 Beiträge
 
#8

Re: idtcpserver - herausfinden was empfangen wird

  Alt 28. Jul 2007, 22:29
Ein Protokoll, v.a. so, wie es bei dir erfordert wird, sollte nicht allzu schwer sein. Da dürfte ein Terminatorzeichenprotokoll reichen. Und das muss ja nicht 1000 Befehle haben. Ich schreib an nem dezentralen Netzwerkchat mit eigenem Protokoll (Hier im Forum suchenLanChat2 TBX) und da sind das nur um die 20 Protokollbefehle. Für einen ganzen Chat! Bei dir sinds dann viel weniger und dann ist es wirklich nciht so aufwendig.

Das Prinzip von nem Terminatorzeichen-Protokoll ist ganz einfach:
irgendeinstring + Terminatorzeichen + nocheinstring + Terminatorzeichen + nocheinstring

in den strings darf dieses Trennzeichen natürlich nicht vorkommen. Außer:
Du hast einen Befehl, der lautet von mir aus DATA. Als Trennzeichen verwende ich jetzt einfach mal "|"
Parameter dieses fiktiven Befehls wären: DATA|Typ|diedaten, also im Anwendungsfall z.B.

"DATA|string|hallo das ist ein string."
Wenn du den string nach dem Trennzeichen zerlegst, kannst du dir ja gleich merken, dass der Befehl DATA nur aus 3 Teilen besteht. Ergo musst du nur die ersten beiden Trennzeichen beachten. Wenn später noch eins kommt, ignorierst du es, weil es in den Bereich "diedaten" gehört.
Dann wäre es auch möglich, den String "hallo|hallo" zu versenden:
"DATA|string|hallo|hallo".

Andere Datentypen, wie integer musst du halt einfach als String behandeln und dann an den Befehlskommand dranklemmen.
Das war jetzt ein ganz kurzer mini-Crashkurs für einen Protokoll-Typ, den ich spontan vorschlagen würde, weil er sicher ein Stückchen einsteiger freundlicher ist. Wenn du das jetzt nicht verstanden hast (ich weiß nicht, ob das so verständlich ist, immerhin kenn ich sowas gut), dann les einfach nochmal in den Tutorials nach.

Gruß
alias5000
Im Interesse der Purierung des germanischen Ideoms ist es opertum den immensen Usus peregrieder Verben auf ein Minimum zu reduzieren.
--> www.lanchat2.de <---
  Mit Zitat antworten Zitat
Benutzerbild von scrat1979
scrat1979

Registriert seit: 12. Jan 2007
Ort: Sulzbach a.d. Murr
1.028 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: idtcpserver - herausfinden was empfangen wird

  Alt 29. Jul 2007, 10:23
@alias5000

Danke für den ausführlichen Mini-Crash-Kurs Ich werde mich nachher mal an die Umsetzung eines solchen Protokolles machen... Bei Bedarf melde ich mich dann wieder

SCRaT
Michael Kübler
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
847 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: idtcpserver - herausfinden was empfangen wird

  Alt 29. Jul 2007, 11:10
Ich klinke mich hier mal ein, weil ich gerade vor dem selben Problem stehe. Ich möchte auch diverse Sachen übermitteln. Ein paar Integer, Strings, aber auch kompliziertere Datenstrukturen oder ganze Dateien. Mein Ansatz wäre, das einfach über Streams zu regeln, die ich versende. Auf der einen Seite wird ein Stream generiert, gesendet und an der anderen Seite nach dem Empfang wieder aufgedröselt. In den Stream würde ich dann einen Header packen, der darüber Aufschluss gibt, was für Daten in dem Stream sind, damit die entsprechend interpretiert werden können. Ist der Ansatz ok, oder kompletter Unsinn? Die Kommunikation würde dann mehr oder weniger komplett über IoHandler.read(aStream) bzw. IoHandler.write(astream) laufen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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