Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi ServerSocket text oder textdatei senden (https://www.delphipraxis.net/184587-serversocket-text-oder-textdatei-senden.html)

EvilKnivel 8. Apr 2015 10:33

ServerSocket text oder textdatei senden
 
Hallo liebe Community :)
Ich weis es ist ein altes Thema, aber ich habe seit längerem ein Programm was ausschließlich mit
Serversockets und Clientsocket kommuniziert.
Zum wechseln der Komponente ist es leider schon zu spät, das wäre ein Riesiger aufwand.
Ich habe bei manchen abfragen das Problem das ich weil Serversocket nur 4096 byte sendet ich durch loops immer wieder nur Bruchteile zu schicke..
ich wollte das gerne optimieren.

anfangs und normale texte schicke ich mit Socket.SendText
und nun habe ich Socket.SendStream mal probiert, aber es verschickt oder empfängt trotzdem nur ein Bruchteil von dem was er sollte.

gibt es eine Möglichkeit das ich ohne immer nur Bruchteile zu senden alles mit einmal auf meinem Client empfangen kann?

besten dank im voraus!
mfg EvilKnievel

Jumpy 8. Apr 2015 10:37

AW: ServerSocket text oder textdatei senden
 
Es wird mMn immer so sein, das Bruchstückweise gesendet wird. Du musst das halt irgendwie Buffern bis alles da ist.

EvilKnivel 8. Apr 2015 11:45

AW: ServerSocket text oder textdatei senden
 
gibts da nix anderes? :pale:

Net7 8. Apr 2015 13:12

AW: ServerSocket text oder textdatei senden
 
Nicht wirklich. Das Protokoll must du schon selber schreiben, damit deine Daten wieder korrekt zusammengesetzt werden.

himitsu 8. Apr 2015 13:34

AW: ServerSocket text oder textdatei senden
 
Zitat:

Zitat von Net7 (Beitrag 1296705)
Nicht wirklich. Das Protokoll must du schon selber schreiben, damit deine Daten wieder korrekt zusammengesetzt werden.

Jupp, entwerder selber machen, oder man nimmt sich eine bestehende "Zwischenschich".

Socket und Co. kümmert sich nur um die Datenübertragung von einem "Stream", aber was da drin ist, ist den Sockets sowas von egal. (die haben sich auch garnicht darum zu kümmen)
Dafür gibt es dann die nächsten Level in der Übertragungshirachie, welche sich um die Datenverwaltung kümmen.

HTTP, FTP, POP3, DataSnap, REST, SOAP usw. sind auch nur "Socket"-Verbindungen, mit einem entsprechenden Protokoll drumrum.

mjustin 8. Apr 2015 14:10

AW: ServerSocket text oder textdatei senden
 
Zitat:

Zitat von EvilKnivel
Zum wechseln der Komponente ist es leider schon zu spät, das wäre ein Riesiger aufwand.

Zitat:

Zitat von EvilKnivel (Beitrag 1296671)
gibts da nix anderes? :pale:

Wechseln oder nicht wechseln, beides gleichzeitig geht nicht ;)

TClientSocket arbeitet nach dem "Schau, ich hab da wieder ein paar Bytes bekommen..." - Prinzip.
Im Unterschied dazu liefern Indy und Synapse die Daten in Portionen, deren Größe oder Endemarkierung man selber vorgibt.
Das heisst, die Bröckchen die über den Socket angeliefert werden, werden in einem Puffer im Indy IOHandler gepuffert und erst dann an deinen Code übergeben, wenn sie vollständig empfangen wurden. Kommen keine daten, wird gewartet bis zum Timeout.

Je nachdem wie stark der Code die TClientSocket Komponente mit dem speziellen Daten-Protokoll verflochten hat, kann das Austauschen gegen Indy (TIdTCPClient) natürlich schon etwas aufwendiger werden.


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