Соединение Kryonet установлено успешно, но сообщения не поступают

Привет, я использую Kryonet в качестве сетевой библиотеки для игры, которую разрабатываю.

У меня есть этот код на стороне сервера:

public class MyServer {
    Kryo kryo;
    Server server;
    Connection connection;
    public MyServer(){
        server = new Server();
        server.start();
        try {
            server.bind(59990, 59900);
        } catch (IOException e) {
            System.out.println("FATAL ERROR");
        }

        kryo = server.getKryo();
        kryo.register(Message.class);

        server.addListener(new Listener() {
            public void received (Connection con, Message str) {
                System.out.println("Message recieved from client to server");
                Message m = (Message)str;
                System.out.println(m.text);

            }
            public void connected(Connection con){
                System.out.println("Hey, we are connected!");
                connection = con;
                con.sendTCP("HOLA CLIENTE!!");
            }
            public void disconnected(Connection con){
                System.out.println(":( He is gone... he'll never come back..");
            }
        });

    }

    public void sendMessage(String tipoMensaje,String tipoTropa,String id){
        connection.sendTCP(tipoMensaje+"-"+tipoTropa+"-"+id);
    }

}

А это на стороне клиента:

public class MyClient {
    Client client;
    Connection connection;
    Kryo kryo;
    public MyClient(){
        client = new Client();
        client.start();


        try {
            kryo = client.getKryo();
            kryo.register(Message.class);

            client.connect(5000, "10.211.55.3", 59990, 59900);
            //sendMessage("fromclient","ee","ee");

            client.addListener(new Listener() {
                public void received (Connection con, String str) {
                      System.out.println(str);

                      System.out.println("Message recieved from server to client");
                }
                public void connected(Connection con){
                    System.out.println("Hey, we are connected!");
                    connection = con;
                    Message m = new Message();
                    m.text="eeep";
                    client.sendTCP(m);
                }
                public void disconnected(Connection con){
                    System.out.println(":( He is gone... he'll never come back..");
                }
            });


        } catch (IOException e) {
            System.out.println("Error while connecting");
        }   


    }


    public void sendMessage(String tipoMensaje,String tipoTropa,String id){
        client.sendTCP(tipoMensaje+"-"+tipoTropa+"-"+id);
        System.out.println("Message sent from client to server");

    }
}

Сообщение — это просто класс со строкой в ​​нем. Когда я пытаюсь подключить клиента к серверу, я получаю сообщение «Эй, мы подключены!» сообщение, а затем «Сообщение получено от клиента на сервер» в командной строке сервера. Однако m.text (содержимое сообщения) не печатается, и я не знаю, почему.

Заранее спасибо.


person yafrack    schedule 14.05.2013    source источник


Ответы (1)


Это потому, что в Listener нет метода public void received (Connection con, String str) — по сути, ваш сервер никогда его не вызывает. Это также причина, по которой вы должны использовать @Override - у вас не будет этой проблемы в первую очередь.

Замените String str на Object o. Затем проверьте, действительно ли ваш объект является Message. Если это так, приведите его к Message и распечатайте его текст. Ваш метод должен выглядеть так:

@Override
public void received(Connection connection, Object packet) {
    if (packet instanceof Message) {
        System.out.println(((Message) packet).text);
    }
}
person Czyzby    schedule 11.01.2014