我正在尝试从另一个类调用一个方法,这意味着我想要使用序列化我创建方法名称的对象及其参数并将其写在套接字上,但是当我想创建ObjectOutputStream时遇到错误“连接由peer重置:套接字写入错误“ 我搜索了可能的原因,但我找不到合适的答案
在服务器端我没有关闭套接字或者我没有做任何工作来关闭我不知道接下来会发生什么: - ??
在该行:
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();
}
提前感谢您的帮助!
答案 0 :(得分:5)
您正在写入已被对等方关闭的连接。我发现很难相信你的搜索没有出现。问题的原因首先是你在这个代码中关闭oos
,因此关闭套接字,因此(a)它将不会第二次运行,并且(b)关闭套接字导致对等体获取EOS条件并关闭套接字,因此(c)第二次运行此代码时,您将遇到至少两个问题。
还有第三个问题你尚未命中。每次运行此代码时都要创建一个新的ObjectOutputStream
,而不是在套接字的生命周期中使用相同的代码。 ObjectInputStream
无论你在哪里使用它都是一样的。如果你在这里做你正在做的事情,你可能会遇到StreamCorruptedException: invalid type code
。