Клиент-сервер не может привести полученный объект к строке - PullRequest
0 голосов
/ 13 апреля 2020

У меня проблема. Я хочу попытаться сделать мою первую большую систему сервер-клиент. Моя Система пока что: У меня есть Клиент, который может подключиться к серверу и отправить пакет входа в систему с именем Клиента. Сервер может получать и «читать» пакеты, но если я хочу прочитать имя из пакета, возникает ошибка: ЕСЛИ я не приведу объект к строке, которую я получил:

Logging Client in. [Ljava.lang.Object;@73310db6

ЕСЛИ я разыграл:

Exception in thread "Thread-1" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.String
at de.bachmaiers.net.Server$2.run(Server.java:129)
at de.bachmaiers.net.Server$1$1.run(Server.java:88)
at java.lang.Thread.run(Thread.java:748)

Мой код:

Как я отправил посылку:

protected void login() {
    if(stopped) 
        return; 

    //1. Connect 
    try {
        System.out.println("[Client] Connection...");
        if(loginSocket != null && loginSocket.isConnected()) 
            throw new AlreadyConnectedException();  

        loginSocket = new Socket(); 
        loginSocket.connect(this.address);

        System.out.println("[Client] Connected to " + loginSocket.getRemoteSocketAddress());

        //2. Login 

        System.out.println("[Client] Logging in..."); 

        ObjectOutputStream out = new ObjectOutputStream(new BufferedOutputStream(loginSocket.getOutputStream()));
        System.out.println("[Client] " + id);
        Datapackage loginPackage = new Datapackage("_INTERNAL_LOGIN_", id,group); 
        loginPackage.sign(id, group);

        out.writeObject(loginPackage);
        out.flush();
        // 


    } catch (IOException e) {
        System.out.println("[Client] LOGIN Failed " + e.getMessage());

    }
}

И как я ее получил: protected void registerLoginMethod ( ) {idMethods.put (INTERNAL_LOGIN_ID, new Executable () {

        @Override
        public void run(Datapackage msg, Socket socket) {
            System.out.println("run");
            if(msg.size() ==3) {
                System.out.println("[Server] Logging Client in. " + (String) msg.get(1));

                registerClient((String) msg.get(1), (String) msg.get(2), socket);
            }

        }
    });
} 

Ошибка в строке 5

Мой класс пакета:

public class Datapackage extends ArrayList<Object>{

private String senderID = "UNSIGNED"; 
private String senderGroup = "UNSIGNED"; 

public Datapackage(String id, Object...o)  {
    this.add(0, id);
    for(Object current: o) { 
        this.add(o);
    }
}




protected void sign(String senderID, String senderGroup) {
    this.senderID = senderID; 
    this.senderGroup = senderGroup; 
}
}

Надеюсь, вы может помочь мне, и вы можете понять мою проблему.

Спасибо.

...