2012-06-06 2 views
0

В настоящее время я работаю над приложением для Android, которое будет связано с существующим продуктом для моего работодателя. Система - это устройство, поддерживающее прошивку, которое управляется через последовательный порт, ethernet или wi-fi с помощью программы .NET Windows, прямой последовательной связи или веб-страницы управления. Приложение Android предназначено для автоматического подключения веб-страницы управления, чтобы устройство контролировалось с телефона без необходимости вручную находить IP-адреса. Для этого мне нужно найти IP-адреса и определить, соответствует ли адрес одному из этих прошивок.Связь сокета TCP/IP Android не позволяет вернуть данные

По существу, что я хочу сделать, это запустить все IP-адреса, которые Android видит и отправляет каждому из них выше. Эта вещь должна пинговать адрес с помощью прошивки и видеть, что отправлено обратно, чтобы определить, соответствует ли адрес устройству прошивки. Я делаю это в настоящий момент, отправляя команду типа «HOME» или «GETINFO» (правильно отформатированную для прошивки, конечно) и сравнивая, что, если что-то отправлено с ожидаемым ответом. Команды, подобные домашним, также могут вызвать физический ответ, поэтому мы знаем, что без отладчика микрочипов, если команда была получена, по крайней мере, была получена.

Поскольку он имеет место, у меня есть правильный адрес, жестко запрограммированный и отправленный этому методу. Я знаю, что приложение может успешно загрузить элементы управления веб-страницы, используя тот же адрес, что и URL, поэтому он должен быть правильным и соединение должно быть хорошим, но прямая связь с устройством не работает. Никакой физической реакции не наблюдается, и никакая информация не возвращается обратно - поток ввода просто отключается и возвращает -1. То, что сильно мешает мне в этом, заключается в том, что, насколько я могу судить, я отправляю информацию точно так же, как и элементы управления .NET Windows, и все же она не работает.

Еще одно примечание: я знаю, что отправка строки IP-адреса в конструктор сокета в качестве имени хоста, вероятно, не должна работать, но поскольку ни одно из них не было выбрано, я знаю, что сокет может разрешить его для IP-адреса. Верный?

Мой код выглядит следующим образом:

private class NetworkTask extends AsyncTask<String, Boolean, Boolean> {  
    protected Boolean doInBackground(String... addr){ 
    try { 
      String message = "<FHGETHUBINFO>"; 
      byte[] input = new byte[8]; 

      //addr is an array of string parameters containing a single IP address string. E.g. addr[0]=”192.168.199.108” 
      Socket s = new Socket(addr[0],80); 

      //outgoing stream redirect to socket 
      OutputStream out = s.getOutputStream(); 
      out.write(message.getBytes()); 

      Log.v(TAG, "output sent. Waiting for input."); 

      InputStream in = s.getInputStream(); 
      //Skip the exclamation mark and newline. Verified that nothing is received even without a skip. 
      in.skip(2); 
      int numBytes = in.read(input,0,8); 
      Log.v(TAG, "Input received: "+numBytes); 
      String st = input.toString(); 
      //Close connection 
      s.close(); 

      if(st != "HUB INFO"){ 
       return true; 
      } 
      else{ 
       return false; 
      } 

    } 

    catch (UnknownHostException e) { 
      Log.v(TAG,"UnknownHostException: "+e.getMessage()); 
      e.printStackTrace(); 
    } 

    catch (IOException e) { 
      Log.v(TAG,"IOException: "+e.getMessage()); 
      e.printStackTrace(); 
    } 
    return false; 

Спасибо за любую помощь вы можете дать, я действительно ценю это!

+0

Вы передаете одиночную строку символов в socket(). – starbolin

+0

Вероятно, вы должны вызвать isReachable() в своем сокете после его создания. Неиспользуется, если адрес не маршрутизируется. – starbolin

ответ

0

Согласен с тем, что я должен звонить isReachable в розетке только для целей проверки, поэтому спасибо за подсказку! Тем не менее, оказалось, что проблема заключается в том, что устройство не обменивается данными на порту 80, поэтому факт, что у меня неправильный порт, определенно является источником проблемы. Спасибо за совет, независимо.

Смежные вопросы