【问题标题】:java Exception: connection reset by peer: socket write errorjava异常:对等方重置连接:套接字写入错误
【发布时间】:2012-06-29 06:13:19
【问题描述】:

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

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

在行中:

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

提前感谢您的帮助!

【问题讨论】:

    标签: java socketexception


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢您的回答哦,我写错了并更正了它,但我仍然遇到同样的错误,我无法获得关闭流和套接字的顺序。我有一个游戏中的玩家套接字数组列表,应该在游戏结束之前打开,在几种方法中我必须在一些套接字中写入或读取,请你帮我解决这个问题并告诉我一个实用的方法来解决它!?非常感谢
    • :如果我这样写会怎样:"(new ObjectOutputStream(socket.get(i).getOutputStream())).writeObject(invo);"但它仍然有同样的错误
    • @user1323163 那么你仍然有同样的问题。我不知道你为什么认为这是一个进步。不是。
    • 关于那个问题,当我离开那个班级并在另一个部分工作时,我突然明白这个错误不再存在了!!!最后我不明白为什么会这样:(但感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2018-08-01
    • 1970-01-01
    • 2014-10-31
    • 2014-08-25
    相关资源
    最近更新 更多