![]() |
Streamdaten mit TTCPBlockSocket.RecvStream von Synapse empfangen
Hallo,
möchte zwischen 2 Programmen Daten, die als Stream vorliegen, mit der Synapse Komponente austauschen. Ich vermute, dass ich beim Empfang der Daten irgendwas falsch mache. Kann wer mir bitte einen Tipp geben? Und zwar sende ich die Daten von Programm_A so:
Delphi-Quellcode:
Das Empfangen in Programm_B:
procedure TForm1.Button1Click(Sender: TObject);
(Sender: TObject); var fs: TFileStream; s: string; fsTest: TFileStream; Sock:TTCPBlockSocket; begin Sock := TTCPBlockSocket.Create; sock.Connect('127.0.0.1', '8008'); fs := TFileStream.Create('echo.txt', fmOpenRead ); fs.Seek(0, soBeginning); Sock.SendStreamRAW(fs); fs.Free; Sock.CloseSocket; Sock.Free; end;
Delphi-Quellcode:
Und zwar bleibt beim Programm_B fs.Size immer 0, sprich der Stream wird irgendwie nicht empfangen.
unit echo;
interface uses Classes, blcksock, synsock; type TTCPEchoDaemon = class(TThread) private fSock:TTCPBlockSocket; public anzahl: Integer; Constructor Create; Destructor Destroy; override; procedure Execute; override; end; TTCPEchoThrd = class(TThread) private Sock:TTCPBlockSocket; CSock: TSocket; public Constructor Create (hsock:tSocket); procedure Execute; override; end; implementation uses Windows, SysUtils; { TEchoDaemon } Constructor TTCPEchoDaemon.Create; begin inherited create(false); fsock := TTCPBlockSocket.create; FreeOnTerminate := true; end; Destructor TTCPEchoDaemon.Destroy; begin fSock.free; end; procedure TTCPEchoDaemon.Execute; var ClientSock:TSocket; begin fSock.CreateSocket; // fSock.setLinger(true,10000); fSock.bind('0.0.0.0','8008'); fSock.listen; while not Terminated and (fSock.LastError = 0) do begin if terminated then break; if fSock.canread(2000) and not terminated then begin ClientSock:=fSock.accept; if fSock.lastError = 0 then begin MessageBox(Self.Handle, PChar('Clientanmeldung'), '', MB_OK or MB_ICONINFORMATION); TTCPEchoThrd.create(ClientSock); end; inc(anzahl); end; end; end; { TEchoThrd } Constructor TTCPEchoThrd.Create(Hsock:TSocket); begin inherited create(false); Csock := Hsock; FreeOnTerminate:=true; end; procedure TTCPEchoThrd.Execute; var i: Integer; fs: TFileStream; begin fs := TFileStream.Create('test.bin',fmCreate ); sock:=TTCPBlockSocket.create; try Sock.socket:=CSock; sock.GetSins; repeat if terminated then break; if sock.CanRead(200) then begin i:=sock.WaitingData; if i>0 then begin Sock.RecvStream (fs, 200); end else if fs.Size>0 then break; end; until terminated; finally Sock.Free; end; fs.Free; end; end. lg, jus |
AW: Streamdaten mit TTCPBlockSocket.RecvStream von Synapse empfangen
ok, bin draufgekommen, dass es anscheinend nur mit meiner alten Synapse Version 39 nicht funktioniert.
Code:
Mit der aktuellsten
Synapse Version 39:
TTCPBlockSocket.SendStream => TTCPBlockSocket.RecvStream: funktioniert NICHT TTCPBlockSocket.SendStreamRaw => TTCPBlockSocket.RecvStreamRaw: funktioniert ![]()
Code:
aktuellste Synapse Version (SHA-1: 1cefdfd48d79c1ff2a46d4a80780b0995540bafb):
TTCPBlockSocket.SendStream => TTCPBlockSocket.RecvStream: funktioniert TTCPBlockSocket.SendStreamRaw => TTCPBlockSocket.RecvStreamRaw: funktioniert lg, jus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:09 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 by Thomas Breitkreuz