java - Android模拟器访问IIS Express

标签 java android iis httpurlconnection iis-express

我有一个使用 Visual Studio 构建的 API,当我运行它时,它运行 IIS Express。 我还有一个使用 Android Studio 构建的 Android 应用程序。 Android 应用程序旨在访问 api 并返回 JSON 响应,但我收到权限被拒绝的异常。

java.net.SocketException: Permission denied

我的android代码是:

public class MainActivity extends AppCompatActivity {

    Button btnGET;
    final String API = "http://localhost:1337/Test/b";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        btnGET = (Button) findViewById(R.id.btnGET);
        btnGET.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                new DoGetTestTable().execute();
            }
        });
    }

    class DoGetTestTable extends AsyncTask<Void, Void, Void>{

        @Override
        protected Void doInBackground(Void... params) {
            try{
                URL url = new URL(API);
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setRequestMethod("GET");
                httpURLConnection.connect();
                InputStream is = httpURLConnection.getInputStream();

                int byteCharacter;
                String result = "";

                while((byteCharacter = is.read()) != -1){
                    result += (char) byteCharacter;
                }

                Log.d("json api", result);

            } catch (Exception e){
                e.printStackTrace();
            }

            return null;
        }
    }
}

我的踪迹是:

07-01 22:59:31.736 2429-2846/sentzke.jackson.apitest W/System.err: java.net.SocketException: Permission denied
07-01 22:59:31.736 2429-2846/sentzke.jackson.apitest W/System.err:     at java.net.Socket.createImpl(Socket.java:454)
07-01 22:59:31.736 2429-2846/sentzke.jackson.apitest W/System.err:     at java.net.Socket.getImpl(Socket.java:517)
07-01 22:59:31.736 2429-2846/sentzke.jackson.apitest W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:1108)
07-01 22:59:31.736 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.Connection.connectSocket(Connection.java:195)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:172)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:367)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:130)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:329)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:246)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:457)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:126)
07-01 22:59:31.737 2429-2846/sentzke.jackson.apitest W/System.err:     at sentzke.jackson.apitest.MainActivity$DoGetTestTable.doInBackground(MainActivity.java:42)
07-01 22:59:31.738 2429-2846/sentzke.jackson.apitest W/System.err:     at sentzke.jackson.apitest.MainActivity$DoGetTestTable.doInBackground(MainActivity.java:34)
07-01 22:59:31.738 2429-2846/sentzke.jackson.apitest W/System.err:     at android.os.AsyncTask$2.call(AsyncTask.java:304)
07-01 22:59:31.738 2429-2846/sentzke.jackson.apitest W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
07-01 22:59:31.738 2429-2846/sentzke.jackson.apitest W/System.err:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
07-01 22:59:31.739 2429-2846/sentzke.jackson.apitest W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
07-01 22:59:31.739 2429-2846/sentzke.jackson.apitest W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
07-01 22:59:31.739 2429-2846/sentzke.jackson.apitest W/System.err:     at java.lang.Thread.run(Thread.java:761)

我尝试将本地主机更改为 10.0.2.2:1337,但这也不起作用。 有什么建议吗?

最佳答案

在 Android 上,您当然应该使用 10.0.2.2:1337,但 IIS Express 端也需要进行更改,将主机名从“localhost”更改为“127.0.0.1”,或空白。

<binding protocol="http" bindingInformation="*:7265:127.0.0.1" />

您可以在我的博客文章中找到所有详细信息,

https://blog.lextudio.com/how-to-let-android-emulator-access-iis-express-f6530a02b1d3

关于java - Android模拟器访问IIS Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44866103/

相关文章:

java - 如何在Java中按行号搜索文本文件?

android - 安装 Google Play 服务

asp.net - 如何在 ASP.NET 中跨多个子域共享 session ?

java - URLEncoder.encode() 和空格?

java - 在android项目中使用Kotlogram库

android - 在 ImageView 中拉伸(stretch)位图

powershell - 特定的 PowerShell 模块未自动加载

c# - ASP.NET Web 应用程序 session 问题

Java/Eclipse - 不再有 R 文件

java - map fragment 直接将相机移动到当前位置