Мне необходимо разработать приложение для Android, которое требует, чтобы телефон подключился к серверу, открыв сокет.Я могу добиться этого, когда я только что подключен к определенной сети Wi-Fi (то есть сети Wi-Fi, на которой размещен сервер), но в ситуации, когда я подключен к сети Wi-Fi и сети мобильной передачи данных, я получаю исключение сокета, какAndroid пытается подключить сокет через мобильную сеть
Я уже смог подключить устройство, когда оно только что подключено к Wi-Fi устройства, для которого требуется установить подключение к сокету
static class StartTCPconnection extends AsyncTask<Void, Void, Void> {
final WeakReference<RemoteActivity> activity;
StartTCPconnection(WeakReference<RemoteActivity> activity) {
this.activity = activity;
}
@Override
protected Void doInBackground(Void... voids) {
try {
socket = new Socket("192.168.4.1", 900);
Log.d(TAG, "is socket connected ? ...." + socket.isConnected());
printWriter = new PrintWriter(socket.getOutputStream(), true);
Log.i(TAG, "Checking if socket is really connected " + (socket.getLocalSocketAddress()));
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
if (socket != null) {
if (socket.isConnected() && isWifi) {
Log.d(TAG, "onPostExecute: " + socket.isConnected());
Toast.makeText(activity.get(), "Connection established", Toast.LENGTH_SHORT).show();
Log.e(TAG, "onPostExecute: " + activity.get().getSharedPreferences(Constants.REMOTE_SWITCH_SHARED_PREFERENCE, Context.MODE_PRIVATE).getInt(Constants.REMOTE_SWITCH_KEY, 99));
if (activity.get().getSharedPreferences(Constants.REMOTE_SWITCH_SHARED_PREFERENCE, Context.MODE_PRIVATE).getInt(Constants.REMOTE_SWITCH_KEY, 1) == 1) {
activity.get().joyStickFragment.checkSocketInstance(socket);
activity.get().joyStickFragment.changeUIForConnect();
} else if (activity.get().getSharedPreferences(Constants.REMOTE_SWITCH_SHARED_PREFERENCE, Context.MODE_PRIVATE).getInt(Constants.REMOTE_SWITCH_KEY, 1) == 2) {
Log.e(TAG, "onPostExecute:Check " + socket.isConnected());
activity.get().buttonRemoteFragment.checkSocketInstance(socket);
activity.get().buttonRemoteFragment.changeUIForConnect();
}
activity.get().connectionIndicatorImage.setImageResource(R.drawable.avishkaar_logo_on);
activity.get().wifiIndicator.setImageResource(R.drawable.wifi_connected_icon);
}
} else {
// Toast.makeText(activity.get(), "Wrong Wifi Network connected", Toast.LENGTH_SHORT).show();
}
}
}
Вышеупомянутый код соединяет меня с розеткой, если единственной доступной сетью является WiFi устройства и мобильная сеть отключена