AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Schnellere Kommunikation mit einer Fritzbox
Thema durchsuchen
Ansicht
Themen-Optionen

Schnellere Kommunikation mit einer Fritzbox

Ein Thema von Dalai · begonnen am 12. Okt 2017 · letzter Beitrag vom 13. Okt 2017
 
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.683 Beiträge
 
Delphi 5 Professional
 
#1

Schnellere Kommunikation mit einer Fritzbox

  Alt 12. Okt 2017, 00:24
Hallo in die Runde ,

diesmal hatte ich wirklich Schwierigkeiten bei der Wahl eines passenden Thementitels. Insofern sorry, falls der nicht ganz passend, vielleicht gar irreführend sein sollte.

Erneut setze ich auf eure Hilfe und euren Sachverstand, weil ich mal wieder ein Problem habe. Aufgrund der Umstellung klassischer Telefonanschlüsse auf IP (NGN) und den damit verbundenen Änderungen arbeite ich derzeit an einer Möglichkeit, bestimmte Daten einer Fritzbox auszulesen und zum Teil grafisch darzustellen (konkret den Traffic-Graphen). Also hab ich geschaut, welche Möglichkeiten ich in dem Bereich mit Delphi habe, und bin dabei auf die Fritzbox-Komponente von Garfield aufmerksam geworden.

Leider stellte ich fest, dass der Abruf der Informationen von der Fritzbox ziemlich lange dauert. Nach genauerer Untersuchung des Codes fiel mir der Aufruf von Sleep(KEEP_ALIVE); vor Empfang der Informationen mit WinSock.recv(...); auf:
[ADD]
Delphi-Quellcode:
while (Result < 0) or (Result = cBufSize) do begin
    Sleep(KEEP_ALIVE);
    FillChar(LBuffer, cBufSize, #0);
    Result := WinSock.recv(FSocket, LBuffer, cBufSize, 0);
    {
    *  Die gelesenen Bytes übernehmen und die Anzahl aktualisieren.
    }

    FBufferStr := FBufferStr + LBuffer;
    Inc(FBytesRcvd, Result);
end;
[/ADD] Testhalber habe ich die KEEP_ALIVE Konstante reduziert von 300 auf 100, was leider zur Folge hat, dass der Abruf zwar schneller geht, aber teilweise(?) keine Informationen mehr zurückkommen. In einem anderen Test habe ich den Code analog zu dem Beispiel-Code von MS in der Doku der recv-Funktion umgebaut:
Delphi-Quellcode:
repeat
    Sleep(10);
    FillChar(LBuffer, cBufSize, #0);
    Result:= WinSock.recv(FSocket, LBuffer, cBufSize, 0);
    FBufferStr:= FBufferStr + LBuffer;
    Inc(FBytesRcvd, Result);
until Result <= 0;
Folge: Code bleibt beim zweiten Aufruf der WinSock.recv-Funktion hängen.

Da ich mich so gar nicht in der Thematik Netzwerk-Programmierung, Sockets und dem Drumherum auskenne, die Fragen an euch:
  • Warum steht das Sleep dort? Warum funktioniert eine Reduzierung des Intervalls nicht bzw. warum muss eine Mindestzeit gewartet werden, damit der Empfang funktioniert?
  • Kann man die Kommunikation irgendwie anders gestalten, primär schneller bzw. ohne Sleep?
  • Welche anderen Möglichkeiten gibt es, mit (dem Webserver) einer Fritzbox zu kommunizieren? Wichtig ist dabei, dass POST funktionieren muss, bei dem XML-Daten in einem SOAP-Envelope übergeben werden. (Ohne Indy wäre schön, weil mir das zu fett ist.)

Grüße
Dalai

Geändert von Dalai (12. Okt 2017 um 17:10 Uhr) Grund: Ursprünglichen Code eingefügt
  Mit Zitat antworten Zitat
 


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:30 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 by Thomas Breitkreuz