저는 약간의 MMO 프로젝트를하고 있습니다 만, 지금은 로그인/등록 시스템에서 일하고 있습니다. ClientLoginPacket을 보내려고 할 때마다 클라이언트는 서버와의 연결을 끊고 서버가 패킷을 전혀받지 못합니다. 나타나는 스택 추적은 없지만 여기에 내 코드가 있습니다. 죄송가 많이 있어요하지만 필요한 모든입니다 :Kryonet 클라이언트가 서버에 패킷을 보낸 후 연결을 끊습니다. (java)
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)입니다.
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();
. ClientLoginPacket 클래스는 패킷을 보낼 Networking.sentTCP (this)를 실행하는 것을 볼 수 있습니다. 이것은 단지 내 메인 크 라이넷 클래스 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);
}
내가 확실히 아는 것은 내가 패킷을 전송하기 전에 서버에 연결해야 할 것입니다, 나는 서버에 연결 리스너를 테스트했다. 내 문제는 무엇입니까? 수업 등록에 문제가 있습니까? 두 클래스가 완전히 동일해야합니까? 미리 감사드립니다!
p.s. 모든 코드를 던지서 죄송합니다. 내가하지 않으면 나는 보통 이것을하지 않을 것이다. 나는 가능한 한 최소한의 것을 넣었다. 다른 물건이 어떻게 작동하는지보고 문제가 있는지 보려면 더 자세히 알아 보려면 그냥 묻습니다. 감사!
이 문제도 발생합니다. 해결책이 있습니까? 공유하십시오. – maohieng
죄송합니다. 1 년 전이었습니다. 그래서 나는이 솔루션을 정확하게 기억하지 못한다.하지만 나는 그것이 대중에게 공개 될 필요가있는 패킷 변수와 관련이 있다고 생각한다. 또한 패킷에는 매개 변수가없는 기본 생성자가 있어야합니다. Kryonet은 객체를 직렬화 할 필요가있다. – vedi0boy