Ошибка «null» в подключении сокетов, Android

Вопрос: То, что я пытался сделать: Я пытался создать тестовое приложение, на данный момент просто установив соединение между Android-телефоном (4.2.2) (как клиент) и java-приложением, работающим на ПК (Windows 8) (как сервер) через соединение сокетов. Что я уже сделал: Я сделал программы для клиента и сервера в java на ПК и проверил их положительно (соединение установлено).

Вопрос:

То, что я пытался сделать:
Я пытался создать тестовое приложение, на данный момент просто установив соединение между Android-телефоном (4.2.2) (как клиент) и java-приложением, работающим на ПК (Windows 8) (как сервер) через соединение сокетов.

Что я уже сделал:
Я сделал программы для клиента и сервера в java на ПК и проверил их положительно (соединение установлено).

Сеть:
И мой телефон, и компьютер подключены к Wi-Fi в моем доме. ipconfig на ПК показывает адрес 192.168.56.1, а при входе в маршрутизатор он показывает адрес моего компьютера, который должен быть 192.168.0.108 (Возможно, я не понимаю, как работает сеть: P).

Код:
клиент (Android)

public void connectPC(View view) { try { clientSocket = new Socket(«192.168.0.108»,1025); outstream = clientSocket.getOutputStream(); instream = clientSocket.getInputStream(); data_out = new DataOutputStream(outstream); data_in = new DataInputStream(instream); statusView.setText(«Connected!»); } catch (Exception e) { statusView.setText(«Error: «+e.getMessage()); } }

Сервер:

import java.net.*; import java.io.*; public class ServerSide extends Thread { ServerSocket serverSocket; public ServerSide(int port) throws IOException { serverSocket = new ServerSocket(1025); serverSocket.setSoTimeout(10000); } public void run() { while(true) { System.out.println(«Waiting for client on port : «+ serverSocket.getLocalPort()); Socket server; try { server = serverSocket.accept(); System.out.println(«Connected to : » +server.getRemoteSocketAddress()); } catch (IOException e) { // TODO Auto-generated catch block System.out.println(e.getMessage()); } } } public static void main(String… args) { int port=6066; try { Thread t = new ServerSide(port); t.start(); } catch(IOException e) { System.out.println(e.getMessage()); } } }

Проблема: – Соединение просто не устанавливается, блок catch показывает e.getMessage() как null.

PS Я пробовал 192.168.56.1 IP-адрес тоже. И добавлено разрешение использования в файле манифеста

Любая помощь в этом отношении пожалуйста..!

Лучший ответ:

Вам нужно напечатать stacktrace, а не только сообщение об исключении. Это даст вам больше информации для отладки проблемы… включая имя исключения и место, где оно было выброшено.

Кроме того, это плохая идея поймать Exception и попытаться оправиться от нее. Catching Exception может поймать все виды исключений, которых вы никогда не ожидали. Восстановление из исключений, которые вы не ожидали, является рискованным… потому что вы не можете быть уверены, что это безопасно. Как правило, лучше позволить программе умереть…

Ответ №1

Я хотел бы дать вам несколько предложений:

  1. используйте asynctask в android для сетевых действий, иначе NetworkOnMainThreadException возникает, потому что хорошо запускать все время, затрачиваемое на работу в фоновом режиме. Также имейте в виду всю задачу в doBackgroung функции asynctask, а затем обновлять и публиковать результат с помощью onPostExecute() и onProgress ().
  2. Если вы не используете asynctask, просто используйте поток и выполните всю сетевую активность в отдельном потоке.
  3. В программном обеспечении java отслеживайте IP-адрес, используя Enumeration вместо InetAddress, потому что Enumeration отобразит весь IP-адрес в сети и, вероятно, вы найдете ответ на свой вопрос. (Попробуйте подключиться ко всему IP-адресу, который показан методом Enumeration, и установлено соединение с подходящим автоматически)
Оцените статью
Добавить комментарий