HttpRequest覆盆子pi上的本地烧瓶服务器与WAP和没有互联网

问题描述 投票:0回答:1

我目前正在尝试使用Android设备通过wifi与覆盆子pi进行通信。我使用覆盆子pi作为WAP,它也托管它自己的烧瓶服务器。手动,我能够使用UI访问网页,但从程序上来说,我一直在ENETUNREACH(网络无法访问)。如果他们都在同一个网络上并且pi没有充当WAP,那么我能够更早地实现这一目标。我能够连接到wifi,但由于没有互联网,它显示一个感叹号。但我无法以编程方式访问Web服务器。这是我连接到wifi并在未配置时设置新配置的地方:

/**
     * Connect to a specific network
     */
    private void connectToWifi(){

        if(lastDevice == null){
            Log.i("WifiRunner", "LastDevice is null");
            connectStatus = ConnectStatus.WAITING_FOR_USER;
            sendIntent("status");
            return;
        }
        String networkSSID = lastDevice.getHostName();
        String networkPass = lastDevice.getPassWord();
        Boolean exists = false;

        Log.i("WifiRunner", "connectToWifi: hostName: " + lastDevice.getHostName() + ", password: " + lastDevice.getPassWord());

        List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
        for( WifiConfiguration i : list ) {
            if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
                Log.i("WifiRunner", "In configured networks!!  " + i.SSID);
                wifiManager.disconnect();
                wifiManager.enableNetwork(i.networkId, true);

                connectStatus = ConnectStatus.CONNECTED;
                sendIntent("status");
                exists = true;
                break;
            }
        }

        if(!exists) {
            WifiConfiguration wc = new WifiConfiguration();
            wc.SSID = "\"" + networkSSID + "\"";
            wc.preSharedKey = "\"" + networkPass + "\"";
            wc.hiddenSSID = true;
            wc.status = WifiConfiguration.Status.ENABLED;
            wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
            int res = wifiManager.addNetwork(wc);
            Log.i("WifiRunner", "add Network returned " + res);
            boolean b = wifiManager.enableNetwork(res, true);
            Log.i("WifiRunner", "enableNetwork returned " + b);

            Log.i("WifiRunner", "connectToWifi: Reconnect: " + wifiManager.reconnect());
        }
    }

我有一大堆代码试图访问URL:

Log.i("WifiRunner", "WAITING FOR RESPONSE!");
                            url = new URL("http://192.168.5.1:5000/connected/" + lastDevice.getPassWord());
                            client = (HttpURLConnection) url.openConnection();
                            client.setRequestMethod("GET");
                            client.setConnectTimeout(1000);

                            Log.i("WifiRunner", client.getURL().toString());
                            int responseCode = 404;
                            try {
                                responseCode = client.getResponseCode();
                            } catch (Exception e) {
                                StringWriter writer = new StringWriter();
                                PrintWriter printWriter = new PrintWriter( writer );
                                e.printStackTrace( printWriter );
                                printWriter.flush();
                                String stackTrace = writer.toString();
                                Log.i("WifiRunner", e.getLocalizedMessage());
                                Log.i("WifiRunner", stackTrace);
                                sendIntent("failure");
                                lastDevice = null;
                            }

这是我得到的日志:

09-11 14:35:01.980 I/WifiRunner(19995): connectToWifi: hostName: Beanster, password: beanster1
09-11 14:35:02.014 I/WifiRunner(19995): In configured networks!!  "Beanster"
09-11 14:35:02.171 I/WifiRunner(19995): WAITING FOR RESPONSE!
09-11 14:35:02.190 I/WifiRunner(19995): http://192.168.5.1:5000/connected/beanster1
09-11 14:35:02.281 I/WifiRunner(19995): failed to connect to /192.168.5.1 (port 5000) after 1000ms: connect failed: ENETUNREACH (Network is unreachable)
09-11 14:35:02.281 I/WifiRunner(19995): java.net.ConnectException: failed to connect to /192.168.5.1 (port 5000) after 1000ms: connect failed: ENETUNREACH (Network is unreachable)
09-11 14:35:02.281 I/WifiRunner(19995):     at libcore.io.IoBridge.connect(IoBridge.java:124)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:183)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:456)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.net.Socket.connect(Socket.java:882)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.android.okhttp.internal.Platform.connectSocket(Platform.java:212)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.android.okhttp.Connection.connect(Connection.java:163)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:323)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:238)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:439)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:364)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.android.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:562)
09-11 14:35:02.281 I/WifiRunner(19995):     at com.example.ndonaldson.beanster.WifiRunner.run(WifiRunner.java:192)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:279)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:152)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-11 14:35:02.281 I/WifiRunner(19995):     at java.lang.Thread.run(Thread.java:818)
09-11 14:35:02.281 I/WifiRunner(19995): Caused by: android.system.ErrnoException: connect failed: ENETUNREACH (Network is unreachable)
09-11 14:35:02.281 I/WifiRunner(19995):     at libcore.io.Posix.connect(Native Method)
09-11 14:35:02.281 I/WifiRunner(19995):     at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:111)
09-11 14:35:02.281 I/WifiRunner(19995):     at libcore.io.IoBridge.connectErrno(IoBridge.java:154)
09-11 14:35:02.281 I/WifiRunner(19995):     at libcore.io.IoBridge.connect(IoBridge.java:122)
09-11 14:35:02.281 I/WifiRunner(19995):     ... 18 more
09-11 14:35:02.281 I/WifiRunner(19995): responseCode:404
09-11 14:35:02.281 I/WifiRunner(19995): Failed to connect

我正在使用与HttpRequest完全相同的地址,但没有运气。我已经在这一段时间了。有人可以帮忙吗?

android flask raspberry-pi wifi wap
1个回答
0
投票

我找到了答案。显然即使enableNetwork返回true,网络还没有完全连接。为了解决这个问题,我在连接后等了大约5秒钟:

Log.i("WifiRunner", "In configured networks!!  " + i.SSID);
                wifiManager.disconnect();
                wifiManager.enableNetwork(i.networkId, true);
            try {
                    Thread.sleep(5000L);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

我想,网址连接速度太快了。

© www.soinside.com 2019 - 2024. All rights reserved.