2010-11-17 6 views
1

У меня возникли проблемы с отправкой данных с Android-клиента на настольный сервер через TCP через Wi-Fi. Эмулятор работает нормально, но на самом телефоне соединение невозможно установить. Исключено исключение «socket not connected».Android: «Socket Not Connected» Исключение

Я прикрепил свой код ниже. Любая помощь, пожалуйста? Большое спасибо!

// КОД внутри деятельности

public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case R.id.send: 
      sendMessage(); 
      return true; 
    /// ...other items 
    } 
} 

private void sendMessage() { 
    String serverAddr = "18.xxx.xx.xxx"; 
    Socket socket = null; 
    try { 
      socket = new Socket(serverAddr, 4444); // EXCEPTION HAPPENS HERE 
    } catch (Exception e) { 
      //show exception on screen 
    } 

    String message = "some message"; 
    try { 
      PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
      out.println(message); 
    } catch (Exception e) { 
      //show exception on screen 
    } finally { 
      socket.close(); 
    } 
} 
+1

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

+0

@Fred: Спасибо, Фред. Проблема решена в соответствии с вашим предложением. – Crastinator

ответ

1

Ваш serverAddr не должен быть строкой, но быть InetAddr. Использование InetAddr.getByName ("18.x.x.x")

0

Адрес сервера Должен быть локальным адресом вашего сервера в сети. Также вам необходимо настроить маршрутизатор «PORT FORWORDING», чтобы отправить все пакеты с порта 4444 и переслать его на локальный IP-адрес вашего сервера. Также как телефон, так и сервер ПК должны быть подключены к той же сети WiFi.