AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TCP persistent

Ein Thema von jeng37 · begonnen am 30. Jul 2015 · letzter Beitrag vom 4. Nov 2015
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: TCP persistent

  Alt 7. Aug 2015, 16:11
Hallo,

vom Prinzip könnte man es so auffassen:

Code:
<Header><Data><Trailer>
Der Header könnte so aussehen:

Delphi-Quellcode:
header = record
  STX : Byte; // ansiChar
  IdTo: Byte;
  IdFrom: Byte;
  Lng: Byte;
end;
data ist dann ein byteArray ( Array of Byte, Größe Lng-1)

trailer: Byte;

Beim Empfangen wertestDu erst den Header aus.
Abhängig von der Anzahl der Datenbytes (header.Lng -1)
werden die Daten gelesen.
Anschliessend wird der Trailer gelesen.
Aus den empfangenen Daten wird ein neuer LRC gebildet.
Dieser LRC wird mit dem empfangenen verglichen.
Stimmen sie überein sind die Daten ok.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#2

AW: TCP persistent

  Alt 7. Aug 2015, 17:11
Danke Klaus,
Ich versuch's mal auf diese weise!

mfg
Jeng
  Mit Zitat antworten Zitat
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#3

AW: TCP persistent

  Alt 19. Aug 2015, 02:35
Hallo,

Ich habs am laufen!
Nur wieso funktionniert es mit der socket compo. und nicht mit der Indy?

Hier die socket version mit der es funktionniert!
Delphi-Quellcode:
procedure TfrmMain.Button2Click(Sender: TObject);
  var
    Data: AnsiString;
begin
  Data := #$04#$01#$02#$23#$3c#$00#$0a#$01#$ff#$00#$00#$00#$00#$00#$00#$00#$fe; // Nachricht zusammenbauen, z.B. schalten
  Memo1.Lines.Add('Send2: '+Str2Hex(Data));
  ClientSocket1.Socket.SendText(Data);
end;
Hier dann die Indy version mit IdTcpClient. (funktionniert leider nicht)
Delphi-Quellcode:
procedure TfrmMain.Button2Click(Sender: TObject);
Var
  port1on: string;
begin
  port1on := #$04#$01#$02#$23#$3c#$00#$0a#$01#$ff#$00#$00#$00#$00#$00#$00#$00#$fe;
  IdTCPClient1.IOHandler.Write(port1on);
end;
  Mit Zitat antworten Zitat
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#4

AW: TCP persistent

  Alt 20. Aug 2015, 11:31
Dieses funktionniert leider auch nicht!
Was mache ich Falsch?

Delphi-Quellcode:
Procedure TFClient.BSendClick(Sender: TObject);
Var
    buf: TidBytes;
  

begin
  SetLength(Buf, 17);
  FillBytes(Buf, 17, 0);
  Buf[0] := $04;
  Buf[1] := $01;
  Buf[2] := $02;
  Buf[3] := $23;
  Buf[4] := $3c; // para1; //Exo1
  Buf[5] := $00;
  Buf[6] := $0a;
  Buf[7] := $01;
  Buf[8] := $ff;//port1;
  Buf[9] := $00;//port2;
  Buf[10] := $00;//port3;
  Buf[11] := $00;//port4;
  Buf[12] := $00;//port5;
  Buf[13] := $00;//port6;
  Buf[14] := $00;//port7;
  Buf[15] := $00;//port8;
  Buf[16] := $fe;//para3;
 
  //IdTCPClient1.IOHandler.Write(Buf); <---- geht nicht
  IdTCPClient1.Socket.Write(buf); <---- geht auch nicht
obwohl im buf die richtige bytefolge gesendet wird.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: TCP persistent

  Alt 20. Aug 2015, 12:27
.. und wie schaut es mit

idTCPClient1.IOHandler.Write(buf,17); aus?

Grüße
Klaus
Klaus

Geändert von Klaus01 (20. Aug 2015 um 12:43 Uhr)
  Mit Zitat antworten Zitat
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#6

AW: TCP persistent

  Alt 20. Aug 2015, 17:01
.. und wie schaut es mit

idTCPClient1.IOHandler.Write(buf,17); aus?
Nein leider hilft das auch nicht.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: TCP persistent

  Alt 20. Aug 2015, 18:57
.. bekommst Du eine Fehlermeldung - in Deinem Programm oder in der entfernten Anwendung?

Der Client hat sivh auch mit dem Server verbunden bevor Du die Nachricht abschickst - oder?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
jeng37

Registriert seit: 23. Jul 2015
42 Beiträge
 
#8

AW: TCP persistent

  Alt 4. Nov 2015, 18:49
Hallo,

vom Prinzip könnte man es so auffassen:

Code:
<Header><Data><Trailer>
Der Header könnte so aussehen:

Delphi-Quellcode:
header = record
  STX : Byte; // ansiChar
  IdTo: Byte;
  IdFrom: Byte;
  Lng: Byte;
end;
data ist dann ein byteArray ( Array of Byte, Größe Lng-1)

trailer: Byte;

Beim Empfangen wertestDu erst den Header aus.
Abhängig von der Anzahl der Datenbytes (header.Lng -1)
werden die Daten gelesen.
Anschliessend wird der Trailer gelesen.
Aus den empfangenen Daten wird ein neuer LRC gebildet.
Dieser LRC wird mit dem empfangenen verglichen.
Stimmen sie überein sind die Daten ok.

Grüße
Klaus
@Klaus oder jemand der mir weiter helfen könnte.

Ich hätte da ein paar Fragen, zu deiner lösung.
Ref: http://www.delphipraxis.net/1311438-post18.html


Delphi-Quellcode:
  header = record
  STX : Byte; // ansiChar
  IdTo: Byte;
  IdFrom: Byte;
  Lng: Byte;
end;

Beispiel:
Code:
'#'(61)(0)(10)(1)(60)(60)(0)(0)(0)(0)(0)(0)(1)
Laut diesem Beispiel währe der header dann:
Code:
STX:# IdTo:61 IdFrom:0 Lng:10
header.Lng -1 währe demnach 9
data wäre byteArray 1 - (Lng-1)?
Trailer währe demnach 1

Wie bilde ich denn nun den neuen LRC?

mfg
Jeng

Geändert von jeng37 ( 5. Nov 2015 um 17:45 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 06:29 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