java - 客户端服务器通信问题

标签 java client-server

我在客户端和服务器之间弹跳对象时遇到问题。

创建一个对象。更新一些字段。发送到服务器。 (这部分有效)

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();
....

请帮我理解这个问题

最佳答案

我的猜测是您使用相同的Socket来从客户端发送和接收。当您关闭客户端上的 ObjectOutputStream 时,会关闭底层的 OutputStream,从而关闭 sock。然后,当您尝试在下面重用它时,它已被关闭并引发异常。

相反,请等待事务完成,然后再关闭客户端代码中的资源(顺便说一下,这应该在 finally block 中完成)。或者,如果等待出现问题,请改用新的 Socket

关于java - 客户端服务器通信问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10059923/

相关文章:

java - 如何将不同的行分割成字符串

java - 无服务器群组消息传递(聊天)Xmpp

java - 错误: variable sblst is already defined in method generate(int) but no error for ForLoop

Java套接字: Client-server communication is stuck with multi-threading if more than 1 client

java - 在小型聊天客户端中通过静态引用成员发送类实例

java - setGraphic() 在递归创建的 TreeItems 上无法正常工作

java - Spring 以合格的 bean 为条件

c - 来自 C 中 sendto() 套接字程序的无效参数

c# - Unity Networking中如何知道客户端和服务器是否已连接

java - 避免阻塞方法使代码异步