2014-04-17 27 views
1

我試圖設置一個基本的客戶端和服務器來獲取網絡連接,但我遇到了一個問題。Kryonet沒有收到自定義類

每當我用自己的類中的一個作爲變量發送一個類時,服務器就不會收到它。我可以使用字符串/ int/etc作爲變量,但只要包含我自己類型的變量,就不會收到它,以及我嘗試發送的所有對象。

一切都註冊Kryo。我只是想念一些東西?任何幫助表示讚賞!

從GameClient:

public GameClient(String name) { 
    client = new Client(); 
    client.start(); 

    NetworkManager.register(client); 

    listener = new ClientListener(); 
    client.addListener(listener); 

    try { 
     client.connect(5000, "24.207.67.56", NetworkManager.port); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    Login login2 = new Login(); 
    User user2 = new User(name); 
    login2.user = user2; 
    login2.name = user2.name; 
    client.sendTCP(login2); // server does not recieve this 

    Login login = new Login(); 
    login.name = user.name; 
    client.sendTCP(login); // server receives this only when it is sent before the Login containing the User 

} 

從遊戲服務器:

public GameServer() { 
    server = new Server(); 

    NetworkManager.register(server); 

    listener = new ServerListener(server); 
    server.addListener(listener); 

    try { 
     server.bind(NetworkManager.port); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    server.start(); 
} 

在ServerListener:

@Override 
public void received(Connection c, Object o) { 
    System.out.println("recieved"); 
    if (o instanceof Login) { 
     System.out.println("[SERVER] " + ((Login) o).name + " logged in."); 
     LoginResult lr = new LoginResult(); 
     lr.result = true; 
     c.sendTCP(lr); 
    } 
} 

從網絡管理器:

public static void register(EndPoint endPoint) { 
    Kryo kryo = endPoint.getKryo(); 
    kryo.register(Login.class); 
    kryo.register(User.class); 
} 

public static class Login { 
    public User user; 
    public String name; 
} 

用戶:

public class User { 
    public String name; 

    public User(String name) { 
     this.name = name; 
    } 
} 
+0

請包括[相關部分的代碼](http://stackoverflow.com/help/mcve),而不是一般性地描述它。具體說明*你想要完成什麼,以及結果與預期結果的不同。請閱讀這個[關於提出好問題的建議](http://stackoverflow.com/help/how-to-ask)和這篇博文[寫完美的問題](http://msmvps.com/blogs/jon_skeet/存檔/ 2010/8月29日/寫最完美-question.aspx)。請特別注意「黃金法則」,但我強烈建議您閱讀整篇文章。 –

回答

4

所以,事實證明,這個問題是由用戶類缺少默認構造函數造成的。刪除構造函數或添加純文本User()構造函數可修復此問題。

如果在你嘗試錯誤地做出錯誤時拋出一個錯誤會很有用,但是很好。

+0

如果你犯了這個錯誤,它現在會拋出一個錯誤。 – trinity420

相關問題