为什么当尝试使用android studio java web服务器连接到我的PC上的服务器时,我收到错误?

时间:2016-05-13 05:12:42

标签: java android sockets android-studio

在我的电脑上,我正在运行一个网络服务器。然后在我的Android设备中使用我在android studio中的代码,我试图连接到网络WiFi上的PC网络服务器。

我的Android设备已经通过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]);

1 个答案:

答案 0 :(得分:0)

解决方案是将这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" />