1

私はAndroidの初心者です。サーバーに位置情報(緯度経度の値)を送信するアプリケーションを開発しました。

Dynamic IP今のところ情報発信 に使っています。

私が直面している問題はWIFI、情報を使用しているときにサーバーに渡されることMobile Internetですが、使用するとサーバーに情報を送信できません。助けてください。

 Location location = locationManager.getLastKnownLocation( LocationManager.NETWORK_PROVIDER);      
    if (location != null) 
    {
    String message = String.format( "Current Location \n Longitude: %1$s \n Latitude:     %2$s  ",location.getLongitude(), location.getLatitude());
    Toast.makeText(MainActivity.this, message,Toast.LENGTH_LONG).show();
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost("http://192.168.1.7/YourPhpScript1.php");

    try {

       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
       nameValuePairs.add(new BasicNameValuePair("id", "12345"));
       nameValuePairs.add(new BasicNameValuePair("message", message));
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
       httpclient.execute(httppost);

     }
 catch (ClientProtocolException e)
    {

} 
 catch (IOException e)
   {

   }`

ここで192.168.1.7は私の動的IPアドレスです

4

2 に答える 2

2

そのポートリダイレクションの問題について、

このIPアドレス「192.168.1.7」はローカルIPアドレスです。これはWIFI経由でアクセスできますが、モバイルインターネットを使用する場合は、ローカルネットワークに接続していません。外部IPアドレスを介して接続する必要があります。ただし、モデムはおそらくすべての接続をブロックします。ポート80をモデムからコンピュータにリダイレクトし、コンピュータのファイアウォールポート80を無効にします。

これらすべてを段階的に確認してください。

  1. PCのファイアウォールからポート80を開きます(http://windows.microsoft.com/is-IS/windows-vista/Open-a-port-in-Windows-Firewall
  2. ポート80をモデムからPCにリダイレクトします(リストhttp://portforward.com/english/routers/port_forwarding/からモデムのブランドを検索します)
  3. 外部IPアドレスから接続するようにアプリケーションを変更します。"http:// external ip address / YourPhpScript1.php"(外部IPアドレスを見つけるには、http://www.whatismyip.com/にアクセスしてください

現在のインフラストラクチャ

  +-----+         +-------+                                     +---+
  | PC  | --------| Modem |-------- INTERNET  ~  ~   ~   ~   ~  |   |
  |     |      |  +-------+                                     |   |
  +-----+      | (external IP 75.1xx.2x.3x)                     +---+
(192.168.1.7)  | (internal IP 192.168.1.1)               (With mobile internet)
               |
            +---+
            |   |
            |   |
            +---+
         Mobile Phone (With wifi connection)
于 2012-10-03T08:21:02.803 に答える
1

Androidアプリケーションからサーバーと通信する方法はいくつかあります。そのためにrawソケットを使用しようとしていると思います。

私の提案は、json/soap通信を使用する必要があるということです。これは非常にシンプルで、標準のhttpポート80を使用しているため、ファイアウォールやその他の通信障壁を通過できるはずです。

安全を確保するために、https(ポート443)を使用できます。

それとは別に、ここでの問題は、Androidプログラミングよりもネットワークにあるようです。コメントを投稿できるように、コードを投稿していただけませんか。

于 2012-09-28T06:47:11.017 に答える