Java 客户端-服务器通信故障
在客户端和服务器之间跳转对象时遇到问题 创建一个对象。更新一些字段。发送到服务器。(此部分有效)Java 客户端-服务器通信故障,java,client-server,Java,Client Server,在客户端和服务器之间跳转对象时遇到问题 创建一个对象。更新一些字段。发送到服务器。(此部分有效) SomeObject thisObject = new SomeObject(); thisObject.setSomeValue(13); // update object to be sent PrintStream toServer = new PrintStream(sock.getOutputStream()); ObjectOutputStream oos = ne
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();
但是到了从客户端取回对象的时候。。程序失败,套接字关闭异常
ObjectInputStream objFromServer = new ObjectInputStream(
new BufferedInputStream(sock.getInputStream())); //java.net.SocketException: Socket is closed
thisObject = (Served) objFromServer.readObject();
....
请帮助我理解这个问题我猜您正在使用相同的
套接字
从客户端发送和接收数据。当您在客户端上关闭ObjectOutputStream
时,这将关闭基础OutputStream
,从而关闭sock
。然后,当您尝试在下面重用它时,它被关闭并抛出异常
相反,在关闭客户端代码中的资源之前,请等待事务完成(顺便说一句,这应该在
finally
块中完成)。或者,如果等待有问题,请使用新的套接字
。能否显示创建套接字
的代码?它非常简单,只要套接字sock=新套接字(服务器名称,服务器端口)代码>这可能不是问题所在,但仍然是:为什么您同时拥有oos.writeObject(thisObject);oos.close()代码>和toServer.println(oos);toServer.flush()代码>在第一步中?你不需要第一对线吗?PrintStream.println()
甚至可以接受一个ObjectOutputStream
作为参数,这有什么意义吗?客户端是否重复使用相同的sock
?关闭来自套接字的流将关闭套接字。对,我的意思是oos.writeObject(thisObject)
部分没有完成将对象发送到服务器的任务吗?好的,保罗。这似乎正是我所看到的问题。