向服务器发送数据不起作用

时间:2012-09-28 06:42:40

标签: android client-server

我是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地址

2 个答案:

答案 0 :(得分:2)

关于端口重定向问题,

此IP地址“192.168.1.7”是您的本地IP地址。哪些只能通过WIFI访问,但是当您使用移动互联网时,您不在本地网络中。您应该通过外部IP地址连接。但你的调制解调器可能阻止你所有的连接将端口80从调制解调器重定向到计算机,并禁用计算机的防火墙端口80。

只需逐步检查所有这些内容。

  1. 从您的PC的防火墙(http://windows.microsoft.com/is-IS/windows-vista/Open-a-port-in-Windows-Firewall
  2. 打开端口80
  3. 将端口80从调制解调器重定向到PC(从列表http://portforward.com/english/routers/port_forwarding/
  4. 中找到您的调制解调器品牌
  5. 将您的应用程序更改为从外部IP地址连接。 “http:// external ip address / YourPhpScript1.php”(要查找外部IP地址,请访问http://www.whatismyip.com/
  6. 您当前的基础设施

      +-----+         +-------+                                     +---+
      | 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)
    

答案 1 :(得分:1)

有几种方法可以从Android应用程序与服务器通信。我假设您正在尝试使用原始套接字。

我的建议是,你应该使用json / soap通讯。它非常简单,当您使用标准http端口80时,您应该能够通过防火墙和其他通信障碍。

为确保安全,您可以使用https(端口443)。

除此之外,这里的问题似乎更像是网络编程的网络。您能否发布一些代码,以便对其进行一些评论。