首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java Kryonet [类未注册异常]

Java Kryonet [类未注册异常]
EN

Stack Overflow用户
提问于 2011-07-23 10:57:48
回答 3查看 2.9K关注 0票数 2

我发现了一个名为Kryonet的接口。好吧,我尝试实现了项目页面中提供的示例。然而,它并不成功。

服务器代码:

代码语言:javascript
复制
public class KryoTest {

public KryoTest() throws IOException {
    Server server = new Server();
    server.start();
    server.bind(54555, 54777);
    server.addListener(new Listener() {

        public void received(Connection connection, Object object) {
            if (object instanceof SomeRequest) {
                SomeRequest request = (SomeRequest) object;
                System.out.println(request.text);

                SomeResponse response = new SomeResponse();
                response.text = "Thanks!";
                connection.sendTCP(response);
            }
        }
    });
    Kryo kryo = server.getKryo();
    kryo.register(SomeRequest.class);
    kryo.register(SomeResponse.class);
}

public static void main(String[] args) throws IOException {
    new KryoTest();
}}

客户端代码:

代码语言:javascript
复制
    public class Kryoclient {

    public Kryoclient() throws IOException {
    Client client = new Client();
client.start();
client.connect(5000,"192.168.1.4", 54555, 54777);

SomeRequest request = new SomeRequest();
request.text = "Here is the request!";
client.sendTCP(request);

 Kryo kryo = client.getKryo();
kryo.register(SomeRequest.class);
kryo.register(SomeResponse.class);

}
    public static void main(String[] args) throws IOException {
        new Kryoclient();
    }
}

例外:

代码语言:javascript
复制
run:
00:00  INFO: Connecting: /192.168.1.4:54555/54777
00:00  INFO: [kryonet] Connection 1 connected: /192.168.1.4
Exception in thread "main" java.lang.IllegalArgumentException: Class is not registered: client.SomeRequest
    at com.esotericsoftware.kryo.Kryo.getRegisteredClass(Kryo.java:319)
    at com.esotericsoftware.kryo.Kryo.writeClass(Kryo.java:374)
    at com.esotericsoftware.kryo.Kryo.writeClassAndObject(Kryo.java:484)
    at com.esotericsoftware.kryonet.TcpConnection.send(TcpConnection.java:196)
    at com.esotericsoftware.kryonet.Connection.sendTCP(Connection.java:68)
    at client.Kryoclient.<init>(Kryoclient.java:24)
    at client.Kryoclient.main(Kryoclient.java:30)

这段代码有什么问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-23 11:02:03

我以前从未听说过Kryonet,但我假设在客户机或服务器首次尝试连接或接受连接之前,您需要将kryo.register(...)行移动到。

票数 10
EN

Stack Overflow用户

发布于 2012-06-25 07:03:34

Kryoserver是一个非常好的多线程客户端-服务器管理器。

在连接客户端并启动或绑定到服务器之前,您必须注册在客户端和服务器上发送和接收的所有类(按相同的顺序)。

票数 1
EN

Stack Overflow用户

发布于 2013-02-26 01:50:52

代码顺序应为:

//创建服务器实例

Server server = new server();

//从服务器实例创建Kryo实例并注册要通过网络发送的类。

Kryo kryo = server.getKryo();

kryo.register(ClassNameYouWant.class);

//添加监听器

server.addListener( ... );

//绑定端口

server.bind(4345);

//并且现在才启动服务器。

server.start();

在您的代码中,您已经在注册类和添加侦听器之前启动了服务器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6797956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档