1

gprmcサーブレットを使用してオープンgtsを介してデバイスを攻撃しようとすると、 http
://192.168.1.99:8080 / gprmc / Data?acct = 1234&id = test01&code = 0xF020&gprmc = $ GPRMC、080701.00、A、3128.7540、N、14257.6714、 W、000.0,000.0,180707 ,,, A * 1C

これは私がAndroidアプリで試しているURLの構造ですが、サーバーは応答しませんが、gps2opengtsアプリで試していると 動作中のサーバーでのスクリーンショット、動作しているので、plsはエラーが発生したことを通知します...?

4

2 に答える 2

0

私は同じことを試みていました、そしてするべきいくつかの読書があります。まず、GPRMCの仕様をお読みくださいhttp://aprs.gids.nl/nmea/#rmc

次に、OpenGTSのソースコードのクラスNmea0183に移動し、文字列の最後にあるチェックサム(メソッドcalcXORChecksum)がどのように生成されるかを確認します。

テストを行ったところ、使用しているチェックサム(1C)が間違っていることがわかりました。文字列の最後にチェックサムを追加していない場合、デフォルトではOpenGTSはチェックサムを無視しないようです。そのため、Androidアプリで常にチェックサムを計算し、最後に追加する必要があります。チェックサムが正しくない場合、要求はドロップされ、何もログに記録されません。

最後に、GPRMC文字列で正しい日付と時刻を使用していることを確認してください。そうしないと、Webアプリのレポートで正しい日付と時刻を見つけるのが困難になります。たとえば、送信した文字列では、日付は2007年7月18日で、時刻はGMT08:07:01のようです。

お役に立てば幸いです。アプリを楽しみにしています。本当に使えました。

これは私がNmea0183のメインメソッドで行ったことです(他のすべてにコメントしました)。

String gprmc = "$GPRMC,080701.00,A,3128.7540,N,14257.6714,W,000.0,000.0,180707,,,A*44";
int cs = calcXORChecksum(gprmc, false);
System.out.println(Integer.toHexString(cs));
Nmea0183 n;

n = new Nmea0183(gprmc, false);
Print.sysPrintln("$GPRMC   : " + gprmc);
Print.sysPrintln("      ==>: " + n.toGPRMC());
Print.sysPrintln("NMEA-0183: \n" + n);
于 2013-02-01T11:53:03.800 に答える
0

@Vivek、

Android で gprmc 文字列の作成に成功したとしても、現在のリクエストにidhttp パラメータとして含まれているはずのdev. OpenGTS にはacct、アカウント文字列とdevデバイス文字列、およびgprmcgprmc 文字列のパラメーター名があります。また、Android API を使用して gprmc 文字列を直接取得できます - http://developer.android.com/reference/android/location/GpsStatus.NmeaListener.html

于 2013-10-11T04:12:37.687 に答える