0

我正在尝试从另一个类调用一个方法,这意味着我想使用序列化我创建了一个方法名称对象及其参数并将其写入套接字但是当我想创建 ObjectOutputStream 时遇到错误“对等方重置连接: socket write error" 我搜索了可能的原因,但找不到任何合适的答案

在服务器端我没有关闭套接字或者我没有做任何工作来关闭我不知道会发生什么:-??

在行中:

ObjectOutputStream oos = (new ObjectOutputStream(os));

我的一段代码是这样的:

InvocationVO invo = new InvocationVO("showStart", treasure, round);

for (int i = 0; i < numPlayer; i++) {
    OutputStream os = socket.get(i).getOutputStream();
    ObjectOutputStream oos = (new ObjectOutputStream(os)); // this has error
    oos.writeObject(invo);

    oos.close();
    os.close();
    Client.getClients()[i].invoke();
}

提前感谢您的帮助!

4

1 回答 1

5

您正在写入已被对等方关闭的连接。我很难相信这没有出现在您的搜索中。问题的原因首先是您正在关闭oos,因此在此代码中是套接字,因此(a)它不会第二次运行,并且(b)关闭套接字会导致对等方获得 EOS 条件和关闭套接字,因此 (c) 第二次运行此代码时,您将遇到至少两个问题。

你还没有遇到第三个问题。ObjectOutputStream每次运行此代码时都在创建一个新代码,而不是在套接字的整个生命周期中使用相同的代码。无论您在ObjectInputStream哪里使用它也是如此。如果你在这里做你正在做的事情,你很可能会遇到StreamCorruptedException: invalid type code.

于 2012-06-29T06:27:18.713 回答