AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TTcpClient: keine Daten
Thema durchsuchen
Ansicht
Themen-Optionen

TTcpClient: keine Daten

Ein Thema von messie · begonnen am 11. Okt 2011 · letzter Beitrag vom 13. Okt 2011
Antwort Antwort
Seite 1 von 2  1 2      
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

TTcpClient: keine Daten

  Alt 11. Okt 2011, 12:44
Moin,

ich habe ein WLan-Modem, was Daten feuert. Die möchte ich gerne empfangen.
Mit einem TcpClient.open kommt die Kommunikation zustande und das Modem sendet.

Ich bekomme aber keine OnReceive ausgelöst, wenn ich mit einem Timer die property BytesReceived abfrage, ist die immer 0.

Die Kommunikation endet nach etwa 10s, da ist dann wahrscheinlich irgendein Puffer voll.

Kann mir jemand einen Tipp geben, wo ich die übertragenen Daten finde?

Danke, Messie

Geändert von messie (11. Okt 2011 um 13:02 Uhr) Grund: Delphi-Tag gesetzt
  Mit Zitat antworten Zitat
Klaus01

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

AW: TTcpClient: keine Daten

  Alt 11. Okt 2011, 14:01
Die Kommunikation endet nach etwa 10s, da ist dann wahrscheinlich irgendein Puffer voll.
Oder ein Timeout hat zugeschlagen.
Kannst Du den Traffic tracen (mit Wireshark)?
Kommt wirklich eine Verbindung zustande.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

AW: TTcpClient: keine Daten

  Alt 11. Okt 2011, 14:52
Die Kommunikation endet nach etwa 10s, da ist dann wahrscheinlich irgendein Puffer voll.
Oder ein Timeout hat zugeschlagen.
Kannst Du den Traffic tracen (mit Wireshark])?
Kommt wirklich eine Verbindung zustande.

Grüße
Klaus
Ja, die Daten kommen tatsächlich, sobald ich connect ausführe (mit Wireshark ).
Ich habe jetzt auch mal einen Indy-Client probiert, das Verhalten ist identisch. Und nach dem Lesen vieler Posts sollte ich besser dazuschreiben, dass ich D2009 verwende.
Mit dem Indy-Client kann ich ConnectAndGetAll aufrufen, dann werden die Daten kontinuierlich geschickt, bis ich das Programm abschieße. Ich bekomme sie aber nicht zu fassen.

D.h., es würde wahrscheinlich reichen, den Puffer per Timer o.ä. zu pollen. Da habe ich aber noch keine Entsprechung zu ReceiveBuf beim Indy-Client gefunden.

Grüße, Messie
  Mit Zitat antworten Zitat
Klaus01

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

AW: TTcpClient: keine Daten

  Alt 11. Okt 2011, 16:03
Hallo,

die Daten kann man auch im onExecute auslesen.

Beispiel:
Delphi-Quellcode:
procedure TTcpListener.onExecute(AContext: TIdContext);
var
  clientIP : AnsiString;
  mStream : TMemoryStream;
begin
  clientIP := AContext.Binding.PeerIP;
  if not AContext.Connection.IOHandler.InputBufferIsEmpty then
    begin
      mStream := TMemoryStream.Create;
      try
        AContext.Connection.IOHandler.InputBufferToStream(mStream);
        mStream.Position := 0;
        // transfer to FileManager
        fileManager.addData(clientIP,mStream);
        // decode data
        if onlineMode then
          decoderScheduler.add(clientIP,mStream);
      finally
        freeAndNil(mStream)
      end;
    end;
  sleep(50);
end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

AW: TTcpClient: keine Daten

  Alt 11. Okt 2011, 16:22
Jetzt habe ich die Indy-Variante mal ausgebaut.
Delphi-Quellcode:
procedure TForm3.Timer1Timer(Sender: TObject);
var
  bytecount : integer;
  vBufferIn: TIdBytes;
begin
  bytecount := indyclient.IOHandler.InputBuffer.Size;
  indyclient.IOHandler.ReadBytes(vBufferIn, bytecount, false);
end;
InputBuffer.Size bleibt bei 0.
Interessanterweise sind die Daten da wenn ich den Client per disconnect trenne.

@ Klaus: wo gibt es denn den TTcpListener und wie wird das onexecute gefeuert?
Denn ich muss einen Datenstrom mit 20kb/s einlesen, was bei 32768k Buffergröße schon etwas häufiger stattfinden muss. Da bietet sich ein Timerevent ja an.

Danke, Messie
  Mit Zitat antworten Zitat
Klaus01

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

AW: TTcpClient: keine Daten

  Alt 11. Okt 2011, 17:21
.. entschuldige, da fehlte wohl etwas an Hintergrundinfos:
Delphi-Quellcode:
constructor TTcpListener.create(tcpPort: Word);
begin
  inherited create;
  listenerPort := tcpPort;
  logger := Tlogger.getInstance;
  onlineMode := false;
  // toDo: replace file path with ini file settings
  fileManager := TFileManager.create(ExtractFilePath(ParamStr(0)));
  decoderScheduler := TDecoderScheduler.create;
  tcpServer := TIdTcpServer.Create(nil);
  tcpServer.OnExecute := onExecute;
  tcpServer.OnConnect := onConnect;
  tcpServer.OnDisconnect := onDisconnect;
  tcpServer.Bindings.DefaultPort := listenerPort;
  tcpServer.Active := true;
  logger.push('TCP Server started, listening on port '+intToStr(tcpPort));
end;
TTCPListener.onExecute ist die onExecute Methode für den TidTcpServer.

Grüße
Klaus
Klaus

Geändert von Klaus01 (11. Okt 2011 um 17:25 Uhr)
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#7

AW: TTcpClient: keine Daten

  Alt 12. Okt 2011, 10:55
.. da fehlte wohl etwas an Hintergrundinfos:
vor allen Dingen bei mir

Ich habe mal versucht, Deine Klasse zu verstehen, mir fehlt da aber noch viel. Von welchem Klassentyp leitest Du ab? Ist das ein Thread-Typ?

Danke, Messie
  Mit Zitat antworten Zitat
Klaus01

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

AW: TTcpClient: keine Daten

  Alt 12. Okt 2011, 11:34
Ich habe mal versucht, Deine Klasse zu verstehen, mir fehlt da aber noch viel. Von welchem Klassentyp leitest Du ab? Ist das ein Thread-Typ?
Danke, Messie
TTcpListener ist von TObject abgeleitet.
Die Klasse enthält einen TidTCPServer.

Da ich das mit TurboDelphi programiert habe, muss ich die onExecute Methode
des TIdTcpServer zur Laufzeit zuweisen, deshalb habe ich die onExecute Ereignisbehandlingsroutine
im TTcpListener definiert.

Das OnExecute vom TidTcpServer wird immer dann ausgelöst, wenn Daten ankommen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#9

AW: TTcpClient: keine Daten

  Alt 12. Okt 2011, 15:05
Hmmm,

läuft bei mir nicht. Der Server im WLan-Modem fängt nicht an zu senden.
Wahrscheinlich fehlt ein connect, was ich beim client ja auslösen kann.

Geht Server vs. Server überhaupt?

Danke, Messie
  Mit Zitat antworten Zitat
Klaus01

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

AW: TTcpClient: keine Daten

  Alt 12. Okt 2011, 15:45

Geht Server vs. Server überhaupt?
irgendwer sollte sich schon zum Server verbinden.
Normalerweise:
Client verbindet sich zum Server.
Client schickt Daten zum Server.
Server macht etwas mit den Daten und schickt Rückmeldung.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:34 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