lNet: Nutzung der nonvisual-Komponenten [erledigt]

Alle Fragen zur Netzwerkkommunikation
Antworten
vx-rexx
Beiträge: 21
Registriert: Do 11. Mär 2010, 10:21

lNet: Nutzung der nonvisual-Komponenten [erledigt]

Beitrag von vx-rexx »

Moin,

nachdem ich mit den visuelle Komponenten von lNet soweit klar komme, stellt sich für mich nun ein Problem bei der Nutzung der "consolen-Komponenten".

Ausgangslage:
  • nur TCP wird benötigt
    es werden einzelne Byte bzw Bytefolgen gesendet
    darauf hin erfolgt eine Antwort der Gegenseite
Als Basis dient mir lNet -> examples\console\ltcp\

Der Connect zur Gegenseite funktioniert, das anschließende Senden auch.
Nach meiner Ansicht wäre dann nur noch ein CallAction innerhalb einer Schleife notwendig, von dem dann OnReceive automatisch aufgerufen wird.

Code: Alles auswählen

{ TSolConn }
  TSolConn = class
    private
      SolCon: TLTcp;
      procedure OnDs(aSocket: TLSocket);
      procedure OnRe(aSocket: TLSocket);
      procedure OnEr(const msg: String; aSocket: TLSocket);
    public
      constructor Create;
      destructor Destroy; override;
  end;
 
  var
    BLConn        :TSolConn;
    EmpfangBuffer : PByte;
    OnReOk        : Boolean;
 
implementation
 
{ TSolConn }
 
procedure TSolConn.OnDs(aSocket: TLSocket);
begin
 
end;
 
procedure TSolConn.OnRe(aSocket: TLSocket);
var
  EmpfangString : AnsiString;
  erg           : Integer;
  empfangbyte   :  Byte;
  OnReEmpfangBuffer: PByte;
begin
  OnReEmpfangBuffer:=AllocMem(120);  //Speicher anfordern
  erg:=SolCon.Get(OnReEmpfangBuffer^,120);
 
  if erg > 0 then begin
    Move(OnReEmpfangBuffer,EmpfangBuffer,erg);
    OnReOk:=True;
  end;
 
  Dispose(OnReEmpfangBuffer); //Speicher wieder freigeben
end;
 
procedure TSolConn.OnEr(const msg: String; aSocket: TLSocket);
begin
 
end;
 
constructor TSolConn.Create;
begin
  SolCon := TLTCP.Create(nil);
  SolCon.OnError := @OnEr;
  SolCon.OnReceive := @OnRe;
  SolCon.OnDisconnect := @OnDs;
  SolCon.Timeout := 100;
end;
 
destructor TSolConn.Destroy;
begin
  SolCon.Free;
  inherited Destroy;
end;
 
...
 
function TSolDat.GetFirmware: Single;
var
  TCPSol        : TSolConn;
  sendbyte      : Single;
  EmpfangString : AnsiString;
  FW            : Single;
  erg           : Integer;
begin
  erg:=0;
  FW:=-1;
  sendbyte:=C_FIRMWARE;
  TCPSol:=TSolConn.Create;
  if TCPSol.SolCon.Connect(IPAdresse,IPPort) then begin // if connect went ok
    repeat
      TCPSol.SolCon.CallAction; // wait for "OnConnect"
    until TCPSol.SolCon.Connected;
  end;
  erg:=TCPSol.SolCon.Send(sendbyte,1);
 
    repeat
      TCPSol.SolCon.CallAction;  // wait for "OnReceive"
    until OnReOk;
  FW_Version:=EmpfangBuffer[0];
  Result:=FW_Version;
 
  TCPSol.Free;
end;
Ich habe zur Kontrolle in der procedure TSolConn.OnRe() einen Haltepunkt gesetzt, aber dieser wird nie erreicht.
Was mache ich falsch?
Zuletzt geändert von vx-rexx am Mi 20. Jul 2011, 20:57, insgesamt 1-mal geändert.

Displaced
Beiträge: 83
Registriert: So 12. Jul 2009, 10:08

Re: lNet: Nutzung der nonvisual-Komponenten

Beitrag von Displaced »

In der consolenschleife musst du

Code: Alles auswählen

Socket.CallAction;
Aufrufen.

vx-rexx
Beiträge: 21
Registriert: Do 11. Mär 2010, 10:21

Re: lNet: Nutzung der nonvisual-Komponenten [erledigt]

Beitrag von vx-rexx »

Es hat sich geklärt. Die Funktion, welche ich hier wählte, arbeitet auf der Gegenseite derzeit nicht korrekt. Da kann ich dann lange warten. :(

Antworten