Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Indy Client empfängt echo vom Indy Server (https://www.delphipraxis.net/205758-indy-client-empfaengt-echo-vom-indy-server.html)

ashkan19 13. Okt 2020 09:24

Indy Client empfängt echo vom Indy Server
 
Guten Tag allerseits,

Ich habe bereits einen TCP Clienten aufgebaut, welche ein bestimmten Hex code an einem Modul verschicken sollte. der Server vom Modul (nicht mein Bastelwerk) schickt einen Echo zurück, sollte er die Nachricht nicht erkennen. Nun mein Problem ist, dass mein Client kein Echo zurück bekommt. müsste ich einen bestimmten Ereignis dafür einprogrammieren, sodass der Client Nachrichten vom Server abfangen kann?

Edelfix 13. Okt 2020 13:09

AW: Indy Client empfängt echo vom Indy Server
 
Hast du ein kleines Beispiel als Quellcode?

ashkan19 15. Okt 2020 08:16

AW: Indy Client empfängt echo vom Indy Server
 
hier ist mein Server:

Delphi-Quellcode:
procedure TForm1.TCPServerDisconnect(AContext: TIdContext);
begin
Memo1.Lines.Add('Verbindungsabbruch: '+AContext.Binding.PeerIP);
end;

procedure TForm1.TCPServerExecute(AContext: TIdContext);
begin
memo1.Lines.Add('Nachricht: '+AContext.Connection.IOHandler.ReadLn);
end;

end.



und hier ist mein Client:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
TCPclient.Port:=strtoint(edit3.Text);
TCPclient.Host:= edit2.Text;
TCPClient.Connect;
if TCPClient.Connected then
 begin
 //stringtohexstr(edit1.text);
  TCPClient.IOHandler.WriteLn(edit1.Text);
  TCPClient.IOHandler.WriteLn(string2hex(edit1.Text)+' (in Hexadezimal)');
  TCPClient.Disconnect;

end;

end;

HolgerX 15. Okt 2020 10:36

AW: Indy Client empfängt echo vom Indy Server
 
Hmm..

Zitat:

Zitat von ashkan19 (Beitrag 1475536)
und hier ist mein Client:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
TCPclient.Port:=strtoint(edit3.Text);
TCPclient.Host:= edit2.Text;
TCPClient.Connect;
if TCPClient.Connected then
 begin
 //stringtohexstr(edit1.text);
  TCPClient.IOHandler.WriteLn(edit1.Text);
  TCPClient.IOHandler.WriteLn(string2hex(edit1.Text)+' (in Hexadezimal)');
  TCPClient.Disconnect;

end;

end;

Wie soll der Client das ECHO empfangen, wenn er nach Verschicken der Daten die Verbindung direkt wieder schließt?
Wie soll der Server ein ECHO schicken, wenn die Verbindung nach Erhalt der Daten nicht mehr da ist?

Es kann nur so gehen:

- Client Connect to Server
- Client sendet Daten to Server
- Client hält Verbindung offen und Wartet (eventuell x Sekunden Timeout)
- Server antwortet an die offene Verbindung mit ECHO
- Client bekommt ECHO (oder nach Timeout eben nicht)
- Client schließt Verbindung

ashkan19 15. Okt 2020 19:50

AW: Indy Client empfängt echo vom Indy Server
 
Ich danke dir vielmals. Hast du eventuell ein Beispiel wie ich die Verbindug aufrecht erhalten konnte?

Edelfix 16. Okt 2020 11:00

AW: Indy Client empfängt echo vom Indy Server
 
So in etwa:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  tcStart: Cardinal;
  aWartezeit: Cardinal;
begin
  TCPclient.Port:=strtoint(edit3.Text);
  TCPclient.Host:= edit2.Text;
  TCPClient.Connect;
  if TCPClient.Connected then
  begin
    //stringtohexstr(edit1.text);
     TCPClient.IOHandler.WriteLn(edit1.Text);
     TCPClient.IOHandler.WriteLn(string2hex(edit1.Text)+' (in Hexadezimal)');
    //--
    tcStart := GetTickCount;
    aWartezeit := 5000; // 5sek.
    while (GetTickCount<=tcStart+aWartezeit) do
    begin
      Application.ProcessMessages;
      Sleep(300);
    end;
    //--
    TCPClient.Disconnect;
  end;
end;

scrat1979 17. Okt 2020 18:33

AW: Indy Client empfängt echo vom Indy Server
 
Zitat:

Zitat von Edelfix (Beitrag 1475619)
So in etwa:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  tcStart: Cardinal;
  aWartezeit: Cardinal;
begin
  TCPclient.Port:=strtoint(edit3.Text);
  TCPclient.Host:= edit2.Text;
  TCPClient.Connect;
  if TCPClient.Connected then
  begin
    //stringtohexstr(edit1.text);
     TCPClient.IOHandler.WriteLn(edit1.Text);
     TCPClient.IOHandler.WriteLn(string2hex(edit1.Text)+' (in Hexadezimal)');
    //--
    tcStart := GetTickCount;
    aWartezeit := 5000; // 5sek.
    while (GetTickCount<=tcStart+aWartezeit) do
    begin
      Application.ProcessMessages;
      Sleep(300);
    end;
    //--
    TCPClient.Disconnect;
  end;
end;

Ich würde etwas anders vorgehen, nämlich in jeden Fall vom Server eine Antwort schicken und durch den Clienten auswerten. Dann spart man sich den Timeout (ich gehe dabei davon aus, dass in der Zwischenzeit die Verbindung zum Server/Client nicht anderweitig gekappt wurde...)

ashkan19 19. Okt 2020 08:22

AW: Indy Client empfängt echo vom Indy Server
 
Ich bekomme leider immer noch kein Echo. konnte es eventuell daran liegen, dass man ein bestimmtes Ereignis vom Clienten zum Empfangen von Daten zuerst ein programmieren sollte?

holger_barntrup 19. Okt 2020 08:57

AW: Indy Client empfängt echo vom Indy Server
 
Da du von einem INDY Client sprichst, hast dir dieses Beispiel mal angesehen und vlt. nachvollzogen?

ashkan19 19. Okt 2020 11:21

AW: Indy Client empfängt echo vom Indy Server
 
Das Programm funktioniert ebenso nicht, daher vermute ich, dass das Problem bei dem Modul und sein server liegt, aber ich danke dir nochmal herzlich


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:57 Uhr.
Seite 1 von 2  1 2      

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