![]() |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Zitat:
![]() ![]() ![]() Bis bald... Thomas |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Zitat:
|
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Hallo Harry
meine Bemerkung zu tcp war genereller Art und nicht Indy/ICS oder was auch immer spezifisch. Ich verwende ausschliesslich ICS und kenne Indy sehr schlecht (und die 4'700 seitige PDF Anleitung mag nun echt niemand lesen ;-)). Aber soweit ich sehe, verwendet Indy "IOHandler" über welche die Kommunikation abgewickelt wird. Es gibt doch sicher Beispiele bei Emba. Wenn du dort keins findest ![]()
Delphi-Quellcode:
dann hast du ein "Client kann senden" und "Server darf aber auch" Beispiel.
procedure TFServer.SendeButtonClick(Sender: TObject);
begin broadcastmessage( SendeEdit.Text ); end; |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Zitat:
Das wird mir bei einer Reihe von meinen Netzwerkprogrammen das Handling sehr vereinfachen...:thumb: (Das ist ein schönes Beispiel hier, dass man auch mit Wissenszuwachs belohnt werden kann, wenn eigentlich selber weiterhelfen wollte...) Nachtrag: Interessanterweise scheint es dann so zu sein, dass mit der idTCPClient-Componente nach einem Writeln nicht mehr direkt eine Antwort des Servers abgefragt werden kann, da die idThreadComponente offensichtlich die Nachrichten zuerst abfängt. Meine bestehende Anwendung kann ich daher leider nicht so einfach umstellen (müsste Senden und Empfangen splitten), aber für neue Anwendungen sicher eine Option... |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Zitat:
Aber mal zum Thema zurück: Kümmern sich die Indys/ICS darum, dass die Pakete vollständig und in der richtigen Reihenfolge ankommen? Ein Screenshot - noch dazu als BitMap - dürfte recht groß sein. Wenn man das z.B. mittels VPN über das Internet sendet, wird das bei einer MTU von 1.500 Bytes sonst echt spannend. |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Um das Ankommen, die Reihenfolge und die Datenintegrität kümmert sich das Transport-Protokoll, also z.B. hier TCP/IP, nicht die Indy.
Die Packete sind nummeriert und werden bei Ankunft entsprechend behandelt. Indy kümmert sich nur um die Übertragungsprotokolle (HTTP/FTP/...). Bei UDP dagegen kann was verloren gehen, da nur "blind" gesendet wird, aber es keine Rückantwort gibt. |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Zitat:
D.h. du kannst zum Beispiel 5*32KB und dann noch 3*12KB senden - und alles kommt (bei tcp) immer in der korrekten Reihenfolge an. Ein Paket kann in mehreren Teilen ankommen, oder es landen gleich mehrere Pakete aufs Mal bei deinem Programm. Je nach verwendeter Methode zum Einlesen der Daten (Indy/ICS) merkst du davon was (oder eben auch nix). Wie weiter oben erwähnt wird: Wenn du über eine Verbindung zum Beispiel Chatmeldungen und Bitmaps senden willst, dann musst du für ein Protokoll sorgen, dank welchem du erkennst was ankommt. Am besten definierst du einen "Meldungstyp" in der Art: WAS WIEVIEL DATEN Wenn du eine Bitmap sendest, dann sendest du WAS=BITMAP WIEVIEL=LÄNGE DER DATEN DATEN=BITMAPDATEN. Wenn du eine Chatmeldung sendest, dann sendest du CHAT 5 HALLO. Der Empfänger liest ankommende Daten in einen Buffer, und übergibt diesen Buffer einem Parser, welcher checkt, ob eine vollständige Meldung angekommen ist. Wenn eine Meldung angekommen ist, dann löschst du die Meldung aus dem Buffer und rufst entsprechende Hilfsfunktionen (Chatmeldung anzeigen, Bitmap speichern etc.) auf. Wenn der Buffer noch nicht leer ist, dann rufst du erneut den Parser auf, bis sämtliche Befehle abgearbeitet sind. |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Ich stelle gerade fest, dass ich meine Frage wohl missverständlich formuliert habe. Entschuldigung!
Ich habe bereits ein Chat-Programm auf Basis der schon genannten Empfehlung, welches hier schon empfohlen wurde. Zitat:
Aber:
|
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
Zitat:
2. serverseitig: ja; clientseitig muss ein Thread verwendet werden wenn die restliche Anwendung nicht einfrieren soll |
AW: BMP bzw. Stream Indy TCPServer an alle verbundenen Clients schicken
[OT]
Zitat:
[/OT] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz