iostream 和读/写对象调用的基础知识
我正在设计一个java服务器来响应多个客户端请求。因此,该设计基本上具有一个服务器套接字,接受一个客户端套接字,从客户端输入/输出流创建一个输入ObjectStream和一个输出ObjectStream。
然后,我在客户端上使用写对象发出请求,在服务器上读取对象以接收请求。处理它,将对象写回与响应相同的流上,并在客户端读取对象上处理响应。
现在,如果我在Android模拟器/设备上运行代码,工作正常。如果我在“android junit java测试用例”上运行,那么在它处理我的所有请求后,我会得到一个异常。异常是在服务器端的读取对象调用。
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(通过)
- TestServer 项目,将其作为 Java 应用程序运行
- TestClient 项目,将其作为 Android 应用程序运行
控制台输出
服务器套接字已打开/127.0.0.1
接受客户端套接字
已创建输入流
已创建输出流
读取已创建对象
测试 2(失败)
- 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)