Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TServerSocket <-> TClientSocket | Daten Weiterleitung (https://www.delphipraxis.net/144045-tserversocket-tclientsocket-%7C-daten-weiterleitung.html)

Darkface 28. Nov 2009 18:37


TServerSocket <-> TClientSocket | Daten Weiterleitung
 
Hallo Dp'ler,

Ich mache mir gerade über eine Weiterleitung von Daten vom ServerSocket zum ClientSocket Gedanken. Hintergrund ist folgender:

Der Server läuft (Beispielsweise) auf Port 80. Im selben Programm läuft auch ein ClientSocket (allerdings [beispielsweise] auf Port 81).

Irgendetwas sendet Daten unbekannter Art an den Server an Port 80. Dieser leitet die Daten intern an den Client weiter welcher die Daten dann über Port 81 wieder versendet.

Kommen Daten zurück (Port 81) soll der Client sie nach dem selben Prinzip wieder an den Server leiten und der Server sie zurück an das unbekannte geben.

Das ganze soll also eine Weiterleitung werden von Port X auf Y und wieder zurück.

Die Frage ist nun, kann das funktionieren wenn ich nicht weis welcher Art die Daten sind?

ServerSocket1.Socket.Reciveln kann ja nur Strings händeln, wenn dann Steuerzeichen, Dateien ect. kommen funktioniert das ja theoretisch nicht oder? Wenn ich dann ReciveBuf nehme weis ich doch nicht wie lang das Empfangene sein wird (?).

Bei der Weiterleitung zwischen Server und Client dachte ich an einen MemoryStream. Ich würde alles Empfangene rein schreiben und vom anderen Socket auslesen und versenden.

Hat da jemand einen Tipp für mich?

MfG
Darkface

[Edit] Verschrieben...

ub60 29. Nov 2009 14:02

Re: TServerSocket <-> TClientSocket | Daten Weiterleit
 
Die Sache mit dem Memorystream oder auch mit langen Strings funktioniert so nicht, da mit den Socket-Kompos nur Daten einer bestimmten Länge übertragen werden können (ich glaube, so um die 8k je Sendung, weiß aber die Zahl jetzt nicht genau).
Ausweg bietet hier ein Aufteilen der Daten in Pakete und ein eigenes Protokoll.
Narses hatte dazu mal ein Super-Tutorial geschrieben (das beste Tut, das ich je gesehen habe :wink: ).
Kleiner Wermutstropfen, es war seeeeeeeeeeeeeeeehr lang.
Zumindest findest Du dort die Ideen für ein ev. eigenes Protokoll.

ub60

sirius 29. Nov 2009 16:05

Re: TServerSocket <-> TClientSocket | Daten Weiterleit
 
Hier muss man sich überhaupt nicht um ein Protokoll kümmern. Einfach Empfangen und Weiterleiten. Und irgendwie bekommt man auch bei ReceiveBuf raus, wie lang der Inhalt ist. (Dazu müsste ich jetzt Delphi anwerfen um nachzusehen)
Wie die Pakete gestückelt werden ist egal und die 8k GRenze besteht nur in der WinSock-Implemetierung von Windows. Die kann man aber verändern. Es handelt sich auch nur um die Größe wie groß der Puffer in so einem Socket ist. Windows teilt den dann soweiso in die entsprechenden Pakete auf.

fui-tak 29. Nov 2009 17:21

Re: TServerSocket <-> TClientSocket | Daten Weiterleit
 
Hallo, ich habe in einer meiner Programme diese Zeile gefunden:
Delphi-Quellcode:
Socket.ReceiveBuf(Uebertragung, Socket.ReceiveLength);
Uebertragung ist dabei ein Record, mit bestimmten Variablen, die ich brauchte. Aber für dich müsste "Socket.ReceiveLength" interessant sein.


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