GPRS Connectionstatus

Antworten
Phantomal
Beiträge: 35
Registriert: Di 15. Jul 2008, 18:20

GPRS Connectionstatus

Beitrag von Phantomal »

Halli Hallo,

nachdem ich ja nun eine Lauffähige WinCE Entwicklungsumgebung habe, und es eine Freude ist zu sehen, wieviel schon funktioniert, bin ich auf ein kleines Problem gestoßen, von dem ich nicht genau weis ob ich das überhaupt selbst lösen kann:

Wenn ich mit dem lNET TCP Socket eine Verbindung zu einem Internetserver herstellen möchte, funktioniert dies, wenn mein Handy per USB am Rechner angeschlossen ist, per Wi-Fi verbunden ist und auch wenn bereits eine GPRS Verbindung besteht.

Was allerdings nicht funktioniert ist, daß die GPRS Verbindung automatisch aufgebaut wird, wenn keine Verbindung ins Internet offen ist.


Meine Fragen lauten also:
1. Wie kann ich in meinem Programm dafür sorgen, daß das Handy eine GPRS Verbindung aufbaut, wenn keine Internetverbindung besteht?

2. Ist es möglich den Verbindungsstatus der 3 Verbindungstypen auszulesen? Es wäre z.B. gut wenn ich unterscheiden könnte ob das Handy grade GPRS oder Wi-Fi nutzt bzw USB nutzt, da ich z.B. ein Update des Programms nicht über GPRS sondern nur über Wi-Fi oder USB downloaden lassen würde.



Liebe Grüße

Phanti

Phantomal
Beiträge: 35
Registriert: Di 15. Jul 2008, 18:20

Beitrag von Phantomal »

Hallo,

ich fürchte ich muss mich ein wenig korrigieren. Mit der vorhandenen GPRS Verbindung funktionierts gar nicht. Das einzige was ich bekomme ist eine Meldung das der Socket connected ist. Aber beim Versuch Daten auszutauschen passiert nichts.

Sobald das Gerät per USB oder WiFi mit dem Internet verbunden ist, tut es genau das was es soll.


Vieleicht mal kurz als Hintergrundinfo:
Ich greife auf einen HTTP Server zu. Allerdings will der nen HTTP POST Request mit bestimmten Daten. Aus irgendeinem Grund funktioniert es mit der lNET HTTP Client Komponente gar nicht. Wobei ich, mangels Erfahrung mit der Komponente, nicht genau weis ob sie einen Bug hat, oder ob ich sie falsch verwendet habe.
Aus meiner Not heraus habe ich nun einfach die TCP Client Komponente verwendet und das was ich aus dem HTTP Protokol benötige selbst implementiert. Und abgesehen von einem minimalen Formatierungsfehler meinerseits ist auch alles im Lot.

Interessant ist nun wie gesagt, daß mit WiFi und USB alles super funktioniert, nur eben mit GPRS absolut nicht. Ich hab auch schon in der Wiki geschmökert und sonst recht viel rumgesucht, aber entweder ich bin blind oder das "Problem" wurde noch nicht diskutiert.


LG

Phanti

Phantomal
Beiträge: 35
Registriert: Di 15. Jul 2008, 18:20

Beitrag von Phantomal »

Guten Morgen,

der Stille entnehme ich, daß ihr genauso auf dem Schlauch steht wie ich selbst. ;)

Ich habe gestern bei meinen Recherchen folgende Seite gefunden. Ein gewisser Adrian scheint da etwas gebaut zu haben was halwegs funktioniert. Und da ich denke daß euch das interessieren könnte, hier mal der Link:

http://www.mail-archive.com/lazarus@mir ... 19948.html


Grüße

Phanti

Phantomal
Beiträge: 35
Registriert: Di 15. Jul 2008, 18:20

Beitrag von Phantomal »

Guten Abend,

um euch mal auf dem laufenden zu halten:

Mit der Unit die ich auf oben geposteter Mailingliste gefunden habe, lässt sich das Handy tatsächlich dazu bewegen eine GPRS Verbindung aufzubauen. Allerdings besteht das Problem weiterhin, daß die LNET TCP Komponente über GPRS nichts empfängt. Senden scheint zu gehen, zumindest zählt mein Traffikmonitor Datenverkehr...

Falls doch noch jemand eine Idee hat wonach ich suchen kann, wäre ich wirklich dankbar :)


LG

Phanti

Benutzeravatar
theo
Beiträge: 10467
Registriert: Mo 11. Sep 2006, 19:01

Beitrag von theo »

Hallo, also nicht das du denkst hier sei keiner (obwohl einige wahrsch. in den Ferien sind), aber ich habe davon keinen Plan.
Freepascal läuft auf vielen Plattformen und vieles ist neu.
Da gibt's halt nicht für alles gleich einen Superspezialisten.
Aber du wirst bestimmt bald einer.. ;-)
Viel Glück dabei.

Phantomal
Beiträge: 35
Registriert: Di 15. Jul 2008, 18:20

Beitrag von Phantomal »

Hallo theo,

vielen Dank für die aufmunternden Worte. Im Moment sieht es so aus als wenn es keine echte Erklärung für das Problem gibt. Und leider bin ich bei Lazarus, LCL und lNET auch noch absoluter Anfänger, sodaß ich mir nicht einfach die Sourcen schnappen kann um nach einem evtl. vorhandenen Fehler zu suchen.

Daher habe ich beschlossen den Fehler so gut wie ebend möglich einzugrenzen und mich dann mal mit dem lNET Entwickler in Verbindung zu setzen, ob er mir da weiterhelfen kann, oder obs vieleicht tatsächlich ein Bug in seiner Komponentenlibrary ist.

Alles in allem finde ich die Idee die hinter FPC und Lazarus steckt sehr gut. Und die Geschwindigkeit mit der sich beides weiterentwickelt ebenfalls. Somit ist es vermutlich auch nur eine Frage der Zeit bis dieses Problem gelöst wird. (Und ich werde tun was ich kann um diese Zeit zu verkürzen.) Und im Notfall kümmere ich mich zunächst um andere Aspekte meines Programms. Denn da die Kommunikation per WiFi funktioniert, würde es für meine Zwecke erstmal reichen einen WiFi Abgleich zu machen bevor man aus dem Haus geht.


LG

Phanti

Phantomal
Beiträge: 35
Registriert: Di 15. Jul 2008, 18:20

Beitrag von Phantomal »

Guten Morgen,

Ich habe mich gestern Abend intensiv mit der lNET HTTPClient Komponente beschäftigt und sie, zumindest für einen GET Request, auch ans laufen gebracht. Außerdem habe ich es geschafft, sowohl mit der TCP Client Komponente als auch mit der HTTPClient Komponente über GPRS einen GET Request auszuführen. Somit ist die GPRS Frage im ersten Aspekt geklärt:

1. Es funktionierte nicht weil ich das HTTP Protokoll in der TCPClient Komponente nicht 100% RFC konform implementiert hatte.

2. Um mit einem eigenen Programm eine GPRS Verbindung aufzubauen, muss man den Connectionmanager nutzen, der aus der Mailingliste stammt die ich oben verlinkt habe. Ich poste ihn hier jetzt nochmal, für den Fall das obiger link mal stillgelegt werden sollte.

Die Unit findet ihr als Downloadanhang und den Beispielcode poste ich hier direkt:

Code: Alles auswählen

var
   ConnInfo: CONNMGR_CONNECTIONINFO;
   FConnection: Logword;
   FStatus: Longword;
 
begin
       ZeroMemory(@ConnInfo, sizeof(ConnInfo));
       ConnInfo.cbSize:= sizeof(ConnInfo);
       ConnInfo.dwParams:= CONNMGR_PARAM_GUIDDESTNET;
       ConnInfo.dwPriority:= CONNMGR_PRIORITY_USERBACKGROUND ;
       ConnInfo.guidDestNet:= IID_DestNetInternet;
 
if ConnMgrEstablishConnectionSync(ConnInfo, FConnection, 60000, FStatus) <> S_OK
       then
         raise Exception.Create('No connection');


Was noch fehlt ist die Erkennung, welche Art von Verbindung man gerade nutzt.


Ich selbst habe jetzt nur noch daß Problem, daß ich mit der HTTPClient Komponente keinen funktionierenden HTTP POST Request hinbekomme. Aber das wäre im Zweifel ein Thema für einen neuen Thread ;)



LG

Phanti

P.S.

Copyright Info:
Sowohl die connmgr unit als auch der Beispielcode (Mit Ausnahme von 2 Variablendeklarationen) wurde von einem Adrian Veith geschrieben. Daher ist es nur fair, wenn ihr seinen Code verwendet, daß er auch in den entsprechenden Programminfos erwähnt wird.
Dateianhänge
connmgr.pp
(30.51 KiB) 231-mal heruntergeladen

Antworten