Einzelnen Beitrag anzeigen

Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

Re: Indy oder WinSock für Netzwerkanwendungen

  Alt 16. Feb 2008, 13:56
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:
procedure TForm1.IdTCPServer1Execute(AThread: TidPeerThread)
var befehl: string;
begin
befehl := Athread.Connection.ReadLn;
if Copy(befehl, 1, 3) = 'SCRthen
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) = 'TEXthen
  Athread.Connection.WriteLn('Text');
  // Bei einfachen Zeichenketten ist das nicht so umständlich
end;
end;
hier ist so ganz nebenbei noch zu empfehlen, den Execute-Block für ThreadSave in einen TCriticalSection-Block zu stecken (.Enter / .Leave)

Client
Delphi-Quellcode:
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;
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.

rollstuhlfahrer
Bernhard
  Mit Zitat antworten Zitat