В настоящее время я пытаюсь связаться с Raspberry Pi по Wi-Fi с помощью устройства Android. Я использую Raspberry Pi в качестве WAP, и он также размещает свой собственный флеш-сервер. Вручную, я могу получить доступ к веб-странице с помощью пользовательского интерфейса, но программно я продолжаю получать ENETUNREACH (сеть недоступна). Я смог достичь этого раньше, если бы они оба были в одной сети, а пи не действовали как WAP. Я могу подключиться к Wi-Fi, но он показывает восклицательный знак из-за отсутствия интернета. Но я не могу получить доступ к веб-серверу программно. Вот где я подключаюсь к Wi-Fi и настраиваю новый конфиг, если не настроен:
/**
* 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, но не повезло. Я был в этом некоторое время. Кто-нибудь может помочь?