gpt4 book ai didi

Java : Hang when socket used second time

转载 作者:行者123 更新时间:2023-12-02 07:05:33 25 4
gpt4 key购买 nike

我有一个客户端类和一个服务器类。我用一个客户端方法来调用服务器,如果我在 jvm session 期间多次尝试使用此方法,我的代码就会挂起。

客户端代码的主要方法:

methodA();
methodA();
ois.close(); //ObjectInputStream
oos.close(); //ObjrctOutputStream
is.close(); //InputStream
os.close(); //OutputStream
socket.close();

客户端代码的 methodA() 如下所示:

os = socket.getOutputStream();
oos = new ObjectOutputStream(os);
oos.writeObject(obj);
is = socket.getInputStream();
ois = new ObjectInputStream(is);
Object o = ois.readObject();

服务器代码的主要方法如下所示:

while (true) {
Socket socket = serverSocket.accept();
is = socket.getInputStream();
ois = new ObjectInputStream(is);
Object o = ois.readObject();
servermethod();
}
oos.close();
ois.close();
is.close();
os.close();
serverSocket.close();

服务器的serverMethod()看起来像:

os = socket.getOutputStream();
oos = new ObjectOutputStream(os);
Object ob = getObject() ; //this method is working fine
oos.writeObject(ob);

我想做的是让客户端使用 methodA() 多次调用服务器。我可能没有正确处理流。有什么帮助吗?

最佳答案

这段代码肯定有一些问题:

  • 您正在同一流之上重复创建 ObjectInputStream 和 ObjectOutputStream。这不是它们应该如何使用的方式。您应该做的是创建一次 ObjectXxxStream,然后在同一个 ObjectXxxStream 上多次调用 readObject 或 writeObject。如果多次发送同一个对象,则需要在再次写入对象之前调用reset

  • 您没有刷新流。如果写入后不刷新,则无法保证序列化表示会发送到另一端......其中有东西正在等待字节到达。

关于Java : Hang when socket used second time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com