簡體   English   中英

為什么在嘗試使用 android studio java web 服務器連接到我的 PC 上的服務器時出現錯誤?

[英]Why when trying to connect using android studio java web server to my server on the pc i'm getting error?

在我的電腦上,我正在運行一個網絡服務器。 然后在我的 android 設備中使用我在 android studio 中的代碼,我試圖連接到網絡 WiFi 上的 pc web 服務器。

我的安卓設備已經通過 WiFi 連接到網絡。 我知道我電腦的IP地址。

這是在MainActivity的頂部

private String[] ipaddresses = new String[]{
            "http://192.168.1.10:8098/?cmd=nothing",
            "http://10.0.0.1:8098/?cmd=nothing",
            "http://10.0.0.138:8098/?cmd=nothing"};

onCreate

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

        addListenerOnButton();
        currentActivity = this;
        initTTS();
    }

然后addListenerOnButton();

public void addListenerOnButton()
    {

        btnClick = (Button) findViewById(R.id.connecttoserverbutton);

        btnClick.setOnClickListener(new OnClickListener()
        {
            byte[] response = null;
            @Override
            public void onClick(View arg0)
            {

                text = (TextView) findViewById(R.id.statusTextView);

                Thread t = new Thread(new Runnable()
                {
                    @Override
                    public void run()
                    {
                        for (int i = 0; i < ipaddresses.length; i++)

                        {
                            counter = i;
                            try
                            {
                                response = Get(ipaddresses[i]);
                            }
                            catch (Exception e)
                            {
                                String err = e.toString();
                            }

                            if (response!=null)
                            {


                                try
                                {
                                    final String a = new String(response, "UTF-8");




                                    text.post(new Runnable()
                                    {
                                        @Override
                                        public void run()
                                        {
                                            text.setText(a + " Oמ " + ipaddresses[counter]);
                                        }
                                    });
                                    iptouse = ipaddresses[i].substring(0,ipaddresses[i].lastIndexOf("=")+1);
                                    connectedtoipsuccess = true;
                                    Logger.getLogger("MainActivity(inside thread)").info(a);
                                } catch (UnsupportedEncodingException e)
                                {
                                    e.printStackTrace();
                                    Logger.getLogger("MainActivity(inside thread)").info("encoding exception");
                                }

                                Logger.getLogger("MainActivity(inside thread)").info("test1");
                                break;

                            }
                            else
                            {

                            }





                        }
                        counter = 0;
                        if (response == null)
                        {
                            text.post(new Runnable()
                            {
                                @Override
                                public void run()
                                {
                                    text.setText("Connection Failed");
                                }
                            });
                        }
                    }
                });
                t.start();
            }
        });

    }

然后最后一個Get方法

private byte[] Get(String urlIn)
    {
        URL url = null;
        String urlStr = urlIn;
        if (urlIn!=null)
            urlStr=urlIn;

        try
        {
            url = new URL(urlStr);
        } catch (MalformedURLException e)
        {
            e.printStackTrace();
            return null;
        }
        HttpURLConnection urlConnection = null;
        try
        {
            urlConnection = (HttpURLConnection) url.openConnection();

            InputStream in = new BufferedInputStream(urlConnection.getInputStream());

            byte[] buf=new byte[10*1024];
            int szRead = in.read(buf);
            byte[] bufOut;

            if (szRead==10*1024)
            {
                throw new AndroidRuntimeException("the returned data is bigger than 10*1024.. we don't handle it..");
            }
            else
            {
                bufOut = Arrays.copyOf(buf, szRead);
            }
            return bufOut;
        }
        catch (IOException e)
        {
            e.printStackTrace();
            return null;
        }
        finally
        {
            if (urlConnection!=null)
                urlConnection.disconnect();
        }
    }
}

在我的 android 設備中運行程序並單擊按鈕時,我收到錯誤/異常:

05-13 08:03:56.055 8930-12196/com.web_server.webserver W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.IoBridge.socket(IoBridge.java:623)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at java.net.Socket.checkOpenAndCreate(Socket.java:687)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:541)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:147)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:190)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity.Get(MainActivity.java:324)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity.access$300(MainActivity.java:34)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity$1$1.run(MainActivity.java:94)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err:     at java.lang.Thread.run(Thread.java:818)
05-13 08:03:56.061 8930-12196/com.web_server.webserver W/System.err: Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
05-13 08:03:56.062 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.Posix.socket(Native Method)
05-13 08:03:56.062 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
05-13 08:03:56.062 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.IoBridge.socket(IoBridge.java:608)
05-13 08:03:56.062 8930-12196/com.web_server.webserver W/System.err:    ... 13 more
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.IoBridge.socket(IoBridge.java:623)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at java.net.Socket.checkOpenAndCreate(Socket.java:687)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:541)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:147)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:190)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity.Get(MainActivity.java:324)
05-13 08:03:56.063 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity.access$300(MainActivity.java:34)
05-13 08:03:56.064 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity$1$1.run(MainActivity.java:94)
05-13 08:03:56.064 8930-12196/com.web_server.webserver W/System.err:     at java.lang.Thread.run(Thread.java:818)
05-13 08:03:56.064 8930-12196/com.web_server.webserver W/System.err: Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
05-13 08:03:56.064 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.Posix.socket(Native Method)
05-13 08:03:56.064 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
05-13 08:03:56.064 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.IoBridge.socket(IoBridge.java:608)
05-13 08:03:56.064 8930-12196/com.web_server.webserver W/System.err:    ... 13 more
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.IoBridge.socket(IoBridge.java:623)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at java.net.Socket.checkOpenAndCreate(Socket.java:687)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at java.net.Socket.setSoTimeout(Socket.java:541)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.Connection.connect(Connection.java:147)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:276)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:211)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:373)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:323)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:190)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity.Get(MainActivity.java:324)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity.access$300(MainActivity.java:34)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at com.web_server.webserver.MainActivity$1$1.run(MainActivity.java:94)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err:     at java.lang.Thread.run(Thread.java:818)
05-13 08:03:56.069 8930-12196/com.web_server.webserver W/System.err: Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
05-13 08:03:56.070 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.Posix.socket(Native Method)
05-13 08:03:56.070 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
05-13 08:03:56.070 8930-12196/com.web_server.webserver W/System.err:     at libcore.io.IoBridge.socket(IoBridge.java:608)
05-13 08:03:56.070 8930-12196/com.web_server.webserver W/System.err:    ... 13 more

第 324 行是:

InputStream in = new BufferedInputStream(urlConnection.getInputStream());

第 34 行:

public class MainActivity extends ActionBarActivity

第 94 行

response = Get(ipaddresses[i]);

解決方案是將這 3 行添加到 AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM