【问题标题】:Java Exception - Socket is closed, reliable udp help?Java Exception - 套接字已关闭,可靠的 udp 帮助?
【发布时间】:2011-12-08 10:08:48
【问题描述】:

我目前正在使用 Reliable UDP 协议的 Java 实现,可在 [此处][1] 找到。该项目完全没有教程,所以我发现很难发现问题。

我已经设置了客户端和服务器。服务器在 localhost:1234 上运行,客户端在 localhost:1235 上运行。服务器首先建立,并循环监听连接。

然后我将其设置为向服务器发送数据包。发送数据包时,服务器调用handlePacket() -

DataInputStream i = new DataInputStream(client.getSocket().getInputStream());
            short packetID = i.readShort();
            i = null;
            switch(packetID){
                case 3:
                    Packeta packeta = new Packeta(client);
                break;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

我目前正在使用一个名为 Packeta 的小型虚拟类进行调试。调用构造函数时,它会从流中读取并将日志写入控制台。但是,总是在构建时,它会挂起 10 秒,然后才产生错误 -

java.net.SocketException: 套接字已关闭 ....
在 lessur.engine.net.packets.Packeta.(Packeta.java:15)

Packeta 的构造函数 -

public Packeta(LessurConnectedNode c) {
        super((short)3, c);
        try {
            /*LINE 15*/ Logger.getLogger("adsfas").info("X was "+c.getSocket().getInputStream().read());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

它与输入流有关。我不知道出了什么问题,但是从阅读其他线程来看,这可能与拥有多个输入流有关。我迷路了,请帮忙。

【问题讨论】:

  • 客户端和服务器不应该连接到同一个套接字吗?例如服务器连接到 localhost:1234 和客户端连接到 localhost:1234?
  • 我不了解问题的所有细节,但最近我在其他情况下也有同样的例外。在我的情况下,套接字因连接超时而关闭,我通过增加服务器的连接超时参数来解决问题

标签: java sockets exception udp inputstream


【解决方案1】:

问题是,在套接字完全初始化之前,我将服务器传递给套接字侦听器。已修复!

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    相关资源
    最近更新 更多