2013-03-15 2 views
0

Моей ситуации сейчас довольно проводной, у меня есть для одной стороны Android приложения работает сервис с сетевым потоком.Связи между Java розеткой и андроидом с помощью Serializable объекты

С другой стороны ява приложение подножка на моем ноутбуке (Win8). Приложение java прослушивает серверный сервер, ожидая, когда с ним будет работать комманда. После того, как приложение android создаст сокет и привяжет его к правильному порту и обратится к сокету сервера в приложении Java, примите его и создайте новый сокет.

Этот новый сокет ожидает пакеты из приложения Android (клиент). Приложение android отправляет сериализуемый объект.

Проблема заключается в том, что приложение Java никогда не читал, но я нюхать с Wireshark и пакет принимается.

Так что я пытаюсь прочитать массив байтов, и работает хорошо, сокет читать без проблем.

Любое предположение, что это происходит? Мой код, я думаю, хорош, это довольно простой материал, и я делал это несколько раз между приложениями Android, не знаю, почему сейчас не работает.

сервера (Java приложение)

mServerSocket = new ServerSocket(port); 

     mReceivedSocket = new Socket(); 

     mReceivedSocket = mServerSocket.accept(); 

     System.out.println("Accepted"); 

     mInput = new ObjectInputStream(mReceivedSocket.getInputStream()); 

     mOutput = new ObjectOutputStream(mReceivedSocket.getOutputStream()); 

     byte[] buf = new byte[4096]; 

     while (mReceivedSocket.isConnected()) { 

      System.out.println("Waiting for packets"); 

      mInput.read(buf, 0, 4096); 

      //NotificationPacket packet = (NotificationPacket) mInput.readObject(); 

      System.out.println("Packet received: "+buf.toString()); 

      //renderPacket(packet); 

     } 

Клиент посыла (Android приложение)

mOutput.writeObject(packet); 

     mOutput.flush(); 

сериализуемый пакет одинаков в обеих сторон.

Спасибо.

+0

Что происходит при вызове readObject()? он сидит бесконечно? –

+0

да, я использую отладчик, и он остается там ... не знаю, почему, похоже, ждет больше. – Marcel

+0

Вы не можете использовать isConnected() в качестве проверки работоспособности соединения. Это не так. Поймать исключения. Для этого они нужны. – EJP

ответ

1

Вам необходимо построить ObjectOutputStream до ObjectInputStream с обоих концов, иначе вы можете получить тупик. Вы также должны читать объекты, с обоих концов. Вы пишете объект, но читаете в массив байтов. Это не имеет смысла.

+0

Да, я читал объекты в обеих сторонах, этот код после попытки увидеть, готов ли что-то, чего я не заметил ... Я попробую, что вы скажете о заказе ... – Marcel

+0

Я пробую это вчера, и заказ важный ... хе-хе спасибо. Я не знал, что это важно. – Marcel