【发布时间】:2012-04-08 10:43:44
【问题描述】:
我在客户端和服务器之间弹跳对象时遇到问题。
创建一个对象。更新一些字段。发送到服务器。 (这部分有效)
SomeObject thisObject = new SomeObject();
thisObject.setSomeValue(13); // update object to be sent
PrintStream toServer = new PrintStream(sock.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(toServer);
oos.writeObject(thisObject);
oos.close();
toServer.println(oos); // send object to server
toServer.flush();
在此之后,服务器进一步更新一些值并将其设置为 1919;
ObjectInputStream objFromClient = new ObjectInputStream(new BufferedInputStream(
sock.getInputStream()));
Served thisObject = (Served) objFromClient.readObject();
thisObject.setSomeValue(1919);
服务器然后将对象发送回客户端
toClient = new PrintStream(sock.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(toClient);
oos.writeObject(thisObject);
oos.close();
objFromClient.close();
sock.close();
但是当需要在客户端重新拾取对象时.. 程序因 Socket Closed 异常而失败
ObjectInputStream objFromServer = new ObjectInputStream(
new BufferedInputStream(sock.getInputStream())); //java.net.SocketException: Socket is closed
thisObject = (Served) objFromServer.readObject();
....
请帮我理解问题
【问题讨论】:
-
您能否显示创建
Socket的代码? -
就像
Socket sock = new Socket(serverName, SERVER_PORT);一样简单 -
这可能不是问题,但仍然:为什么您在第一步中同时拥有
oos.writeObject(thisObject); oos.close();和toServer.println(oos); toServer.flush();?你不只需要第一对线吗?PrintStream.println()甚至可以接受ObjectOutputStream作为参数吗?这有意义吗? -
客户端是否重复使用相同的
sock?关闭来自Socket的流将关闭套接字。 -
对,我的意思是
oos.writeObject(thisObject)这块不是已经完成了对象到服务器的发送吗?
标签: java client-server