TTcpClient: keine Daten
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 |
AW: TTcpClient: keine Daten
Zitat:
Kannst Du den Traffic tracen (mit Wireshark)? Kommt wirklich eine Verbindung zustande. Grüße Klaus |
AW: TTcpClient: keine Daten
Zitat:
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 |
AW: TTcpClient: keine Daten
Hallo,
die Daten kann man auch im onExecute auslesen. Beispiel:
Delphi-Quellcode:
Grüße
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; Klaus |
AW: TTcpClient: keine Daten
Jetzt habe ich die Indy-Variante mal ausgebaut.
Delphi-Quellcode:
InputBuffer.Size bleibt bei 0.
procedure TForm3.Timer1Timer(Sender: TObject);
var bytecount : integer; vBufferIn: TIdBytes; begin bytecount := indyclient.IOHandler.InputBuffer.Size; indyclient.IOHandler.ReadBytes(vBufferIn, bytecount, false); end; 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 |
AW: TTcpClient: keine Daten
.. entschuldige, da fehlte wohl etwas an Hintergrundinfos:
Delphi-Quellcode:
TTCPListener.onExecute ist die onExecute Methode für den TidTcpServer.
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; Grüße Klaus |
AW: TTcpClient: keine Daten
Zitat:
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 |
AW: TTcpClient: keine Daten
Zitat:
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 |
AW: TTcpClient: keine Daten
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 |
AW: TTcpClient: keine Daten
Zitat:
Normalerweise: Client verbindet sich zum Server. Client schickt Daten zum Server. Server macht etwas mit den Daten und schickt Rückmeldung. Grüße Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:42 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