AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Streamdaten mit TTCPBlockSocket.RecvStream von Synapse empfangen
Thema durchsuchen
Ansicht
Themen-Optionen

Streamdaten mit TTCPBlockSocket.RecvStream von Synapse empfangen

Ein Thema von jus · begonnen am 20. Nov 2018 · letzter Beitrag vom 20. Nov 2018
Antwort Antwort
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#1

Streamdaten mit TTCPBlockSocket.RecvStream von Synapse empfangen

  Alt 20. Nov 2018, 10:45
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:
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;
Das Empfangen in Programm_B:

Delphi-Quellcode:
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.
Und zwar bleibt beim Programm_B fs.Size immer 0, sprich der Stream wird irgendwie nicht empfangen.

lg,
jus
  Mit Zitat antworten Zitat
jus

Registriert seit: 22. Jan 2005
344 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Streamdaten mit TTCPBlockSocket.RecvStream von Synapse empfangen

  Alt 20. Nov 2018, 13:54
ok, bin draufgekommen, dass es anscheinend nur mit meiner alten Synapse Version 39 nicht funktioniert.
Code:
Synapse Version 39:
TTCPBlockSocket.SendStream => TTCPBlockSocket.RecvStream: funktioniert NICHT
TTCPBlockSocket.SendStreamRaw => TTCPBlockSocket.RecvStreamRaw: funktioniert
Mit der aktuellsten Github Version funktioniert es.
Code:
aktuellste Synapse Version (SHA-1: 1cefdfd48d79c1ff2a46d4a80780b0995540bafb):
TTCPBlockSocket.SendStream => TTCPBlockSocket.RecvStream: funktioniert
TTCPBlockSocket.SendStreamRaw => TTCPBlockSocket.RecvStreamRaw: funktioniert


lg,
jus

Geändert von jus (21. Nov 2018 um 00:16 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:28 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