Android подключается к модему

У меня есть 2 устройства Android, один работает как сервер, который находится в режиме привязки, и принимает подключения к порту. Другое устройство действует как клиент, который подключается к серверной точке доступа и устанавливает соединение с сервером через порт. (Все делается без маршрутизатора посередине).

Код сервера выглядит следующим образом: (Когда сервер android выполняет код, устройство находится в режиме привязки)

ServerSocket server = new ServerSocket(PORT); while (true) { Socket client; client = server.accept(); ClientThread com = new ClientThread(client, this); Thread t = new Thread(com); t.start(); } 

Код клиента выглядит так: (когда клиент android выполняет этот код, устройство подключается к точке доступа)

 Socket client = new Socket(); int serverIP = wifiManager.getDhcpInfo().serverAddress; String stringIP = android.text.format.Formatter.formatIpAddress(serverIP); InetAddress address = InetAddress.getByName(stringIP); SocketAddress socketAddress = new InetSocketAddress(address, PORT); client.connect(socketAddress); 

Я получаю следующую ошибку на клиенте

 java.net.ConnectException: failed to connect to /192.168.43.1 (port 12345): connect failed: ENETUNREACH (Network is unreachable) at libcore.io.IoBridge.connect(IoBridge.java:114) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) at java.net.Socket.connect(Socket.java:842) at java.net.Socket.connect(Socket.java:785) at com.alternatewifimeshmessaging.HostManager.clientConnect(HostManager.java:283) at com.alternatewifimeshmessaging.HostManager.client(HostManager.java:189) at com.alternatewifimeshmessaging.HostManager.run(HostManager.java:59) at java.lang.Thread.run(Thread.java:856) Caused by: libcore.io.ErrnoException: connect failed: ENETUNREACH (Network is unreachable) at libcore.io.Posix.connect(Native Method) at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) at libcore.io.IoBridge.connectErrno(IoBridge.java:127) at libcore.io.IoBridge.connect(IoBridge.java:112) ... 8 more 

Сервер не дает ошибок.

У меня есть следующий набор разрешений в файле манифеста Android:

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

В идеале мне нужно будет перенести некоторые данные с сервера на клиента.

Что я делаю не так?

Solutions Collecting From Web of "Android подключается к модему"

При тестировании выясняется, что соединение не может быть установлено на устройстве привязки.

Но если мы отменим процесс и откройте серверный сервер на подключенном клиенте. И подключитесь к нему с устройства привязки, он будет работать.

Так что реверсирование коммуникации – это ответ.

Сторона сервера

 class ServerThread implements Runnable { public void run() { socket = new Socket(); try { serverSocket = new ServerSocket(SERVERPORT); } catch (IOException e) { e.printStackTrace(); } while (!Thread.currentThread().isInterrupted()) { try { socket = serverSocket.accept(); CommunicationThread commThread = new CommunicationThread(socket); new Thread(commThread).start(); } catch (IOException e) { e.printStackTrace(); } } } } 

Сторона клиента

 class ClientThread implements Runnable { @Override public void run() { try { socket = new Socket(); InetSocketAddress socketAddress = new InetSocketAddress(SERVER_IP, SERVERPORT); socket.connect(socketAddress); CommunicationThread commThread = new CommunicationThread(socket); new Thread(commThread).start(); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } 

В привязке к Wi-Fi соединение провайдер не может работать как клиент. Таким образом, нам нужно реализовать двунаправленное соединение сокетов tcp. Используйте серверный сокет с номером порта в устройстве, которое находится в режиме привязки. Это устройство действует как сервер. В клиентском устройстве используйте сокет для доступа к клиентскому порту с IP-адресом.