2013-10-10 2 views
0

Я отправляю сообщение через сокеты из приложения android в программу java. Это сообщение отправляется с помощью принтера.Android Java - Два сокета при отправке одного

вот как я отправить мое сообщение от андроида для Java программы:

out.println("Hello there"); 
out.flush(); 

Это, как я получаю сообщение:

while(true){ 
String msg = in.readLine(); 

System.out.println("MSG: " + msg); 

...some if-statements... 
} 

Выход System.out.println является: MSG: Привет * MSG: нулевой *

Как получилось, что я получил нуль? Я только посылаю «привет там».

Помощь была бы оценена, спасибо!

EDIT: Фактический код программы java.

while (run) { 
      String msg = in.readLine(); 
      String[] parts; 
      String username; 
      String password = null; 

      System.out.println("MSG: " + msg); 

      parts = msg.split("\\*"); 
      username = parts[0]; 
      password = parts[1]; 

      boolean validUser = false; 

      validUser = db.authenticate(username, password); 

      if (validUser) { 
         db.updateIP(username,      socket.getInetAddress().getHostAddress()); 
         out.println("done"); 
         out.flush(); 
      } else { 
         out.println("loginfail"); 
         out.flush(); 
         closeSocketConnection(); 
       } 
      } 
     } 

    private void closeSocketConnection() throws IOException { 
     in.close(); 
     out.close(); 
     socket.close(); 
     run = false; 
    } 
+0

Если строка ввода '' Hello world ''я бы ожидал' password = parts [1]; 'чтобы вывести' IndexOutOfBoundsException'. –

+0

Где определяется 'run'. Какова вся функция, в которой содержится цикл while? –

+0

Хорошо, я знаю, мне жаль, что я не был таким ясным. «Hello world» был всего лишь примером моего первого псевдокода. Теперь я отправляю «user * 123», и я получаю MSG: пользователь * 123 MSG: null. Цикл while помещается в обработчик (который расширяет поток), а переменная run определяется вне цикла while, но внутри класса Handler. – user2099024

ответ

0

Каково ваше условие выхода для вашей петли while?

Он смотрит на меня, как он повторяет и readLine вернется null когда конец потока достигнут вызывая MSG: null для печати.

Обновлено дается новая информация:

Предполагая user*123 является допустимым именем пользователя/пароль комбо, то closeSocketConnection() никогда не вызывается, возвращается цикл к вершине, readLine возвращается null, и вы увидите свой ошибочный вывод. Вслед за NullPointerException на parts = msg.split("\\*");

+0

My wile-loop остановится в if-statement, где я закрываю соединение сокета в приложении Android. Кроме того, это не так, пока (true), но булева переменная, которая становится ложной, когда я закрываю соединение в if-statement. Как я могу избежать этого нуля? – user2099024

+0

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

+0

Обновлен мой вопрос. – user2099024

0

Ваш цикл следует читать:

while ((line = in.readLine()) != null) 
{ 
    // ... 
} 

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

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