私は小さな MMO プロジェクトを行っており、現在はログイン/登録システムに取り組んでいます。ClientLoginPacket を送信しようとすると、クライアントはサーバーから切断され、サーバーはパケットをまったく受信しません。表示されるスタック トレースはありませんが、これが私のコードです。申し訳ありませんが、それはすべて必要です。
ClientLoginPacket.java:
package net.vediogames.archipelo.networking.packets;
import net.vediogames.archipelo.networking.Networking;
public class ClientLoginPacket extends Packet{
private String username;
private String password;
private int validity = 0;
public ClientLoginPacket(String username, String password){
this.username = username;
this.password = password;
}
public String getUsername(){
return this.username;
}
public String getPassword(){
return this.password;
}
public int getLoginValidity(){
return validity;
}
public void setLoginValidity(int validity){
this.validity = validity;
}
public void send(){
Networking.sendTCP(this);
}
}
それがログインパケットです。これとサーバーの唯一の違いは、インポートとパッケージの宣言です (単なる archipelo ではなく archipeloserver)。ご覧のとおり、このクラスは Packet を拡張します。これが私の Packet クラスです。
package net.vediogames.archipelo.networking.packets;
public abstract class Packet {
protected int connectionID;
public abstract void send();
public int getConnectionId(){
return connectionID;
}
public void setConnectionID(int id){
this.connectionID = id;
}
}
すべてのパケットには、send()
それらを送信するために呼び出されるメソッドがあります。パケットを送信する方法は、これを行うことnew ClientLoginPacket(username, password).send();
です。Networking.sentTCP(this) を実行してパケットを送信することがわかる ClientLoginPacket クラスです。これは、メインの kryonet クラスでこのコードを実行するだけNetworking.java
です。クライアント側でパケットを送信するために使用するコードは次のとおりです。
public static void sendTCP(Packet object){
client.sendTCP(object);
}
kryonet では、送信する前にクラスを登録する必要があります。私はそれをしましたが、それが適切に行われたかどうかはわかりません。これが私が使用した正確なコードです。サーバ:
private static void setupClasses(){
Kryo kryo = server.getKryo();
kryo.register(ClientRegisterPacket.class);
kryo.register(ClientLoginPacket.class);
System.out.println("Registered classes.");
}
クライアント:
public static void setupClasses(){
Kryo kryo = client.getKryo();
kryo.register(ClientRegisterPacket.class);
kryo.register(ClientLoginPacket.class);
}
私が確かに知っていることは、パケットを送信する前にサーバーに接続していることです。サーバー上の接続リスナーでテストしました。私の問題は何ですか?履修登録に問題はありますか?両方のクラスが完全に同一である必要がありますか? 前もって感謝します!
psそのコードをすべて捨てて申し訳ありません。必要がなければ、通常はこれを行いません。なるべく入れません。他のものがどのように機能するかを確認し、問題があるかどうかを確認するためにさらに必要な場合は、私に尋ねてください. ありがとう!