【问题标题】:Connection refused when trying to acces local webservice using Android尝试使用 Android 访问本地 Web 服务时连接被拒绝
【发布时间】:2012-07-23 14:13:29
【问题描述】:

我正在创建一个内置于 Visual Basic 2010 的服务器,该程序可以插入/更新/删除到我使用的数据库。我创建了一个本地 Web Service,用于将服务器上的数据库与 Android 中的数据库同步。

我使用以下 Android 代码:

package com.zelacroix.bukumenu;

import java.io.IOException;
import java.io.InputStream;

import org.apache.http.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.params.*;
import org.apache.http.impl.client.DefaultHttpClient;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class Sinc extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.sinc);
        Toast.makeText(getApplicationContext(), getKategori(), 5).show();
    }

    public String getKategori(){
        HttpParams httpParameters = new BasicHttpParams();
        HttpConnectionParams.setConnectionTimeout(httpParameters, 60000);
        HttpConnectionParams.setSoTimeout(httpParameters, 60000);
        HttpClient client=new DefaultHttpClient(httpParameters);
        HttpPost httpPost = new HttpPost("http://192.168.1.2:1924/TugasAkhir/Service.asmx/getKategori");
        HttpResponse response;
        String result="";
        try
        {
            response=client.execute(httpPost);
            HttpEntity entity= response.getEntity();
            DataHandler dataHandler = new DataHandler();
            if (entity!=null)
            {
                InputStream instream = entity.getContent();
                result = dataHandler.convertStreamToString(instream);
                instream.close();
            }
        } catch (ConnectTimeoutException e) {
                e.printStackTrace();
                Toast.makeText(getApplicationContext(), e.toString(), 100).show();
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(getApplicationContext(), e.toString(), 100).show();
        }
        return result;
    }


}

我收到一个错误: org.apache.http.conn.httphostconnectexception connection to ``http://192.168.1.2:1924..... refused

供您参考.. 当我使用模拟器并将IP地址更改为10.0.2.2时,此代码运行成功。

当我访问托管的在线 Web 服务时,此代码也会成功运行。 仅当我以本地方式运行 Web 服务并尝试使用笔记本电脑的 IP (192.168.1.2) 使用 Android 设备访问它时,它才会失败。

我正在使用 WIFI。

我该如何解决这个错误?

【问题讨论】:

  • 您是尝试通过 wifi 连接还是数据连接?
  • 我正在使用wifi访问它们.. VB和Android之间的通信TCP成功..

标签: android web-services android-wifi


【解决方案1】:

尝试添加:

if (android.os.Build.VERSION.SDK_INT > 9) {
    StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
    StrictMode.setThreadPolicy(policy);
}

这有帮助吗?

【讨论】:

  • 在 onCreate() 中添加。那应该没问题。是的,迈克很可能是对的。如果您的目标是或在较新的手机上构建,如果您的 HTTP 请求未在单独的线程上完成,Android 将拒绝连接。
  • 当我在 onCreate() 上添加它时出现 2 个错误:'(听起来“strictmode 无法解析为一种类型”
  • 你导入了吗?试试 Ctrl + Shift + O(或者对于 Mac,Cmd + Shift + O)。
  • 您可能正在为 API 级别 9 或更低级别进行开发(因此 Eclipse 无法识别较新的代码),但您正在更高 API 级别的设备上运行它。尝试将目标 SDK 设置得更高(例如 15)以进行开发。
  • 首先我使用 API 级别 8 或 froyo 2.2 开发了该代码,但我在 ICS 4.0.3 中运行我的应用程序,到目前为止没有问题.. TCP 通信成功.. 但现在我'我面临这个问题..当我在清单中将 SDK 更改为目标 API 级别 11(我拥有的最高级别)时,收到警告“属性 minSdkVersion (11) 高于项目目标 API 级别 (8)”如何解决这个问题。即使我将 SDK 更改为 11 级,上面的代码仍然有两个错误:'(
【解决方案2】:

检查您的笔记本电脑 IP 和设备 IP。

应该在同一个子网掩码中

笔记本电脑和移动(安卓)设备的 ip 必须是 192.168.X.X

【讨论】:

  • 它在同一个班级.. 我的笔记本电脑 IP 是 192.168.1.2,我的 Android 是 192.168.1.4
  • 我遇到了同样的问题。在模拟器中调试也是如此。之后我在设备中安装了 apk。
  • 在同一系统中调试将起作用(如模拟器)。如果您想从系统外部进行调试。你必须修改配置。更简单的方法是可以在浏览器中打开服务,输入可能的值,然后你就可以调试代码了。
  • 当我用模拟器调试时,我使用了 10.0.2.2:1924 及其工作.. 当我使用 wifi 时,上面的代码可以访问完美在线托管的 Web 服务.. 我的问题.. 是什么时候我在本地运行我的 Web 服务 (.asmx),因此它的地址类似于 localhost:1924/TugasAkhir/Service.asmx,然后我尝试使用上面的代码通过 wifi 访问该 Web 服务,但连接被拒绝:(
  • 在手机浏览器中打开服务。如果你有同样的问题。检查防火墙。
【解决方案3】:

终于解决了.. 问题是 Visual Studio 2010 在设置 IIS 时如此复杂,然后我尝试在 Visual Studio 2008 上开发我的 Web 服务并且 IIS 工作正常! Android可以访问网络服务而不会拒绝连接。

【讨论】:

    【解决方案4】:

    遇到了这个问题,但解决方案是一些熟悉的人会遇到的问题。

    让您的 <uses-permission android:name="android.permission.INTERNET"/> 在您的清单上。

    【讨论】:

      猜你喜欢
      • 2023-03-12
      • 2021-07-08
      • 2013-01-05
      • 1970-01-01
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      相关资源
      最近更新 更多