Я проектирую Java-сервер для ответа на несколько клиентских запросов.Таким образом, проект в основном имеет серверный сокет, принимает клиентский сокет, создает inputObjectStream и outputObjectStream из клиентского ввода / вывода.
Затем я использую writeobject на клиенте, чтобы сделать запрос, readObject на сервере, чтобыполучить запрос.Обработайте его, запишите объект обратно в тот же поток, что и ответ, и на стороне клиента readobject, чтобы обработать ответ.
Теперь, если я запускаю код на эмуляторе / устройстве Android, он работает нормально.Тот же кусок кода, если я запускаю «тестовый пример java для android junit», я получаю исключение после того, как он обработает все мои запросы.Исключение на стороне сервера при вызове 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?
Отредактировано
У меня есть пример проекта, загруженный на 4shared.com (http://www.4shared.com/archive/98gET_pV/Issue15426tar.html) ИЛИ (http://www.sendspace.com/file/v04zjp)
Тест 1 (PASS)
- TestServer, запустите егов качестве приложения Java
- Project TestClient, запустите его как приложение Android
Вывод на консоль
Открыт серверный сокет /127.0.0.1
Клиентский сокет принят
Создан входной поток
Создан выходной поток
Чтение Созданного объекта
Тест 2 (FAIL)
- Проект TestServer, запустите его как приложение Java
- Проект TestClient, запустите его как тест Android Junit
Вывод на консоль
Открыт серверный сокет /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)