Я проектирую java-сервер для ответа на несколько клиентских запросов. Таким образом, дизайн в основном имеет серверный сокет, принимает клиентский сокет, создает inputObjectStream и outputObjectStream из клиентского ввода/выводаStream.
Затем я использую writeobject на клиенте, чтобы сделать запрос, readObject на сервере, чтобы получить запрос. Обработайте его, напишите объект обратно в том же потоке, что и ответ, и на клиентском стороне readobject для обработки ответа.
Теперь, если я запускаю код на эмуляторе/устройстве Android, отлично работает. Тот же кусок кода, если я запускаю "тестовый пример junit java для Android", получаю исключение после обработки всех моих запросов. Исключение находится на стороне сервера при вызове readObject.
java.io.EOFException at
java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2570)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1314)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)`
Вопрос Это правильный дизайн для чтения/записи объектов на iostream?
Edited
У меня есть пример проекта, загруженного на 4shared.com(http://www.4shared.com/archive/98gET_pV/Issue15426tar.html) ИЛИ (Http://www.sendspace.com/file/v04zjp)
Тест 1 (PASS)
- Проект TestServer, запустите его как приложение Java
- Проект TestClient, запустите его как приложение для Android.
Консольный выход
Открыт серверный сокет /127.0.0.1
Принимается клиентский сокет
Создан входной поток
Созданный поток вывода
Чтение созданного объекта
Тест 2 (FAIL)
- Проект TestServer, запустите его как приложение Java
- Проект TestClient, запускайте его как Android Junit Test
Консольный выход
Открыт серверный сокет /127.0.0.1
Принимается клиентский сокет
Error : Unable to open server socket. Server wont load.
java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2297)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2766)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:797)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:297)
at com.test.server.myThread.run(Main.java:52)
at com.test.server.Main.main(Main.java:32)