AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi "Cache" von Sockets löschen
Thema durchsuchen
Ansicht
Themen-Optionen

"Cache" von Sockets löschen

Ein Thema von Zacherl · begonnen am 11. Mai 2005 · letzter Beitrag vom 12. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

"Cache" von Sockets löschen

  Alt 11. Mai 2005, 18:22
Hallo,
ich habe folgendes Problem:

Die Socket Komponenten haben die (nervende) Eigenschaft, dass sie, wenn man

Delphi-Quellcode:
ClientSocket1.Socket.SendText('Text1');
ClientSocket1.Socket.SendText('Text2');
schreibt, beim Server meistens der String: "Text1Text2" ankommt.

Ich habe das temporär so umgangen, nur funktioniert dies auch nicht immer:

Delphi-Quellcode:
ClientSocket1.Socket.SendText('Text1');
Sleep(50);
ClientSocket1.Socket.SendText('Text2');
außerdem geht Zeit drauf.

Weis jemand, wie ich das anders machen könnte?
Also so, dass erst "Text1" und im nächsten Ereignissaufruf "Text2" ankommt.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: "Cache" von Sockets löschen

  Alt 11. Mai 2005, 18:23
Versuch mal, statt dem Sleep(50) ein SendText(#0) zu verwenden.
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: "Cache" von Sockets löschen

  Alt 11. Mai 2005, 18:27
Danke,
ich versuchs mal.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#4

Re: "Cache" von Sockets löschen

  Alt 11. Mai 2005, 22:20
Moin!

Ich kann mich nur wiederholen: Die Sockets sind reine Datenübertragungskomponenten - sie kümmern sich einen sch*** dreck um die abtrennung von den Datenpacketen. Wenn du sowas haben willst, dann bau dir ein Protokoll. Die Sockets garantieren dir niemals, dass getrennt gesendete Packete auch einzelnd, gleich getrennt wieder ankommen. Ganz im Gegenteil. Es kann sehr gut sein, das du die Packete sogar noch kleiner bekommst - jedes Zeichen einzelnd z.B.

Also pass deinen Code an und verlass dich nicht auf Dinge die nirgendwo erwähnt/beschrieben/garantiert werden. Bau dir ein simples Protokoll was einfach nur ein Trennzeichen definiert zwischen den Nachrichten - und vor allem sammle genug Daten vor der Ausgabe bzw. beachte das es leicht zu einer Defragmentierung kommen kann/wird.

Sorry für den Text, aber diese weitläufig verbreitete Meinung, das die SendText() Stückelung so hinten wieder aus dem Socket rauskommt, geht mir auf die Nerven. Wenn man in x-beliebigen Delphi Foren sucht, findet man immer wieder den Hinweis dazu, aber trotzdem findet wohl kein neuer Nutzer diese Beiträge...

MfG
Muetze1
  Mit Zitat antworten Zitat
Johnny_W

Registriert seit: 27. Apr 2005
33 Beiträge
 
Delphi 2005 Personal
 
#5

Re: "Cache" von Sockets löschen

  Alt 11. Mai 2005, 23:21
Hiho,

Lese dir die RFC 147 mal durch, dort ist beschrieben wie Socket definiert ist.

Soweit ich mich erinnern kann wird das end of line durch
#13#10 gekennzeichnet und somit der LineMode aktiviert.


MfG
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#6

Re: "Cache" von Sockets löschen

  Alt 12. Mai 2005, 01:27
Moin!

Zitat von Johnny_W:
Hiho,

Lese dir die RFC 147 mal durch, dort ist beschrieben wie Socket definiert ist.

Soweit ich mich erinnern kann wird das end of line durch
#13#10 gekennzeichnet und somit der LineMode aktiviert.


MfG
1. Ok, habe ich.
2. Es steht nix von CR/LF drinne - wäre ja noch schöner
3. Der Socket dient der reinen Datenübertragung - wenn du ihm ein CR/LF reingibst, dann kommt das beim Empfänger wieder raus. Wenn du ihm reine Binärdaten reinpackst, kommen diese auch wieder raus.
4. Nein, SendText packt kein CR/LF hinter den Text - wäre ja noch schöner wenn irgendwelche Automatismen die zu sendenen Daten verändern...
5. EOL tritt wenn, dann nur bei zeilenbasierten Sockets auf - dieses wäre dann aber schon wieder eine Art Protokoll - und da kannst du es festlegen wie du willst. Die Allgemeinheit würde bei solchen zeilenbasierten Socket CR/LF nehmen, klar. Aber das bleibt trotzdem dir überlassen, die Socket Komponenten haben keine Automatismen und übertragen stur die Daten.

MfG
Muetze1
  Mit Zitat antworten Zitat
Johnny_W

Registriert seit: 27. Apr 2005
33 Beiträge
 
Delphi 2005 Personal
 
#7

Re: "Cache" von Sockets löschen

  Alt 12. Mai 2005, 09:07
Moin Moin Muetze1!

Danke für die Aufklärung , und mein Tipp die RFC 147 durchzulesen war ein nettgemeinter Hinweis an den Threadersteller und bezog sich keineswegs auf deinen Kommentar.

zu 1.-5) Der Socket selbst ist nur ein Endpunkt des Kommunikationslinks,gekennzeichnet durch IP und Port. Kann dir da also nur zustimmen.


Glaube das Thema Sockets hat es dir angetan

Dann wäre ja
Zitat:
Also so, dass erst "Text1" und im nächsten Ereignissaufruf "Text2" ankommt.
#13#10 bei SendText eine Lösung der Problematik?

MfG
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: "Cache" von Sockets löschen

  Alt 12. Mai 2005, 09:32
Moin!

Zitat von Johnny_W:
Danke für die Aufklärung , und mein Tipp die RFC 147 durchzulesen war ein nettgemeinter Hinweis an den Threadersteller und bezog sich keineswegs auf deinen Kommentar.
Oh, sorry - hatte ich falsch verstanden...

Zitat von Johnny_W:
Dann wäre ja
Zitat:
Also so, dass erst "Text1" und im nächsten Ereignissaufruf "Text2" ankommt.
#13#10 bei SendText eine Lösung der Problematik?
Ja, das wäre ja dann ein eindeutiger Trenner und bildet somit schon eine Art Protokoll...

MfG
Muetze1
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

Re: "Cache" von Sockets löschen

  Alt 12. Mai 2005, 13:16
Heist das, das wenn ich
Delphi-Quellcode:
SendText('Text1');
SendText(#13#10);
SendText('Text2');
aufrufe erst Text1 und dann Text2 ankommt?

PS: Mit SendText(#0) kam nur in 1 von 100 Fällen überhaupt noch Text an.

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#10

Re: "Cache" von Sockets löschen

  Alt 12. Mai 2005, 13:34
Zitat von Florian Bernd:
Heist das, das wenn ich
Delphi-Quellcode:
SendText('Text1');
SendText(#13#10);
SendText('Text2');
aufrufe erst Text1 und dann Text2 ankommt?

PS: Mit SendText(#0) kam nur in 1 von 100 Fällen überhaupt noch Text an.

Florian
Ja, kann aber durchaus an div. stellen getrennt sein. Schick doch nach jedem Text #13#10 und warte im Eventhandler solange bis #13#10 kommt und werte dann den text aus. Verwenden tuste dafür einen MemoryStream o.ä. als Cache.
Wer später bremst ist eher tot.
  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 23:52 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