![]() |
Indy oder WinSock für Netzwerkanwendungen
hi,
möchte gern ein (noch) kleines Netzwerkprogramm programmieren. Es werden nur Werte und Texte versendet. Womit würdet ihr ein Netzwerkprogramm programmieren. Mit den Indys oder mit WinSock. Ich weis Indy baut auf WinSock auf. Nur von Indy habe ich keine Ahnung und mit Winsock habe ich schon einige Anwendungen programmiert. Habe schon mal mit Indy eine Anwendung programmiert aber irgend wie hat das nicht funktioniert. Der Server oder der Client ist immer eingefroren. Wäre für einpaar Tipps dankbar! |
Re: Indy oder WinSock für Netzwerkanwendungen
die WinSocket-komponenten haben nur eine begrenzte Anzahl von Zeichen, die gleichzeitig versendet werden können. (bei mir sind das 8192 Byte). Das Problem bei längeren Zeichenketten ist das zusammenfügen...
bei Indy hast du das Problem nicht, da es schon gemanaged wurde... kleines Beispiel für Indy Server
Delphi-Quellcode:
hier ist so ganz nebenbei noch zu empfehlen, den Execute-Block für ThreadSave in einen TCriticalSection-Block zu stecken (.Enter / .Leave)
procedure TForm1.IdTCPServer1Execute(AThread: TidPeerThread)
var befehl: string; begin befehl := Athread.Connection.ReadLn; if Copy(befehl, 1, 3) = 'SCR' then begin // zum Beispiel einen Screenshot mit einem Stream senden mittels AThread.Connection.WriteStream(Stream); // zum einfacheren abfragen auf der Clientseite: AThread.Connection.disconnect; end; if Copy(befehl, 1, 3) = 'TEX' then Athread.Connection.WriteLn('Text'); // Bei einfachen Zeichenketten ist das nicht so umständlich end; end; Client
Delphi-Quellcode:
bei WinSockets gehts beim Server ähnlich. beim Client läuft das lesen über eine extra Prozedur, wesshalb der Programmablauf etwas unübersichtlich wird und alle Antworten in der selben Prozedur, die durchaus mal 800 mal hintereinander aufgerufen werden kann, behandelt werden.
procedure Get;
begin // TCPClient sollte schon verbunden sein IdTCPClient1.WriteLn('SCREEN'); while IdTCPClient1.Connected do IdTCPClient.ReadStream(Stream, -1, true) // Warten bis disconnect siehe oben //... IdTCPClient1.WriteLn('TEXT'); showmessage(IdTCPClient1.ReadLn); end; rollstuhlfahrer |
Re: Indy oder WinSock für Netzwerkanwendungen
danke, für das kleine Beispiel das hilft mir schon mal weiter.
Aber es könnte vorkommen das ich alle 10 oder 30 Sekunden ein befehl schicke. Dann kann ich doch nicht immer die Verbindung aufbauen und wieder schließen oder? |
Re: Indy oder WinSock für Netzwerkanwendungen
Zitat:
rollstuhlfahrer |
Re: Indy oder WinSock für Netzwerkanwendungen
habe es mit indy programmiert, so das alles bestens funktioniert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 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