【问题标题】:Kryonet - buffer overflow - small object sendingKryonet - 缓冲区溢出 - 小对象发送
【发布时间】:2015-10-04 14:41:30
【问题描述】:

喂。一切都在本地主机上运行没有问题。现在服务器设置在专业主机上。错误总是一样的:

10-04 16:35:29.974 5730-5830/com.drkmns.gameloopballs E/AndroidRuntime:   FATAL EXCEPTION: Thread-8160
10-04 16:35:29.974 5730-5830/com.drkmns.gameloopballs E/AndroidRuntime: Process: com.drkmns.gameloopballs, PID: 5730
10-04 16:35:29.974 5730-5830/com.drkmns.gameloopballs E/AndroidRuntime: com.esotericsoftware.kryo.KryoException: Buffer overflow. Available: 0, required: 9

代码很简单:

  String host = ui.inputHost();
    try {
        client.connect(5000, host, Network.port);
        // Server communication after connection can go here, or in Listener#connected().
    } catch (IOException ex) {
        ex.printStackTrace();
    }

    name = "MOJANAZWA";
    Login login = new Login();
    login.name = name;
    client.sendTCP(login);
    TestPacket test = new TestPacket();
    while (true) {

        test.msg = "33333333333333";
        client.sendTCP(test);
    }

TestPacket 类只有一个字符串。当我通过模拟器连接时,一切正常。当我在三星 Galaxy S4 上打开它时,它会抛出这个异常。

已经尝试增加服务器和客户端构造函数中的缓冲区 - 无效。

有什么想法吗?

【问题讨论】:

    标签: java kryo kryonet


    【解决方案1】:

    我不知道这怎么可能 - 也许有人可以解释 - 但是让线程休眠 1ms 工作 O.o

    while (true) {
    
            test.msg = "55555444444444444444444444444444444444444444444444444444444444444455";
            client.sendTCP(test);
            synchronized (client) {
                try {
                    client.wait(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    

    【讨论】:

    • 大概是额外的时间让客户端有机会读取数据,从而将其从缓冲区中删除?
    • 我不知道你的情况,但这种“技术”允许在下面指出一个 NullPointerException,我更正了它并且不需要在最终代码中等待
    猜你喜欢
    • 1970-01-01
    • 2011-12-24
    • 2016-01-15
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多