Объектные потоки Java в проект libGDX - PullRequest
0 голосов
/ 05 июня 2018

Я пытался протестировать кое-что о взаимодействии клиент / сервер в Java, потому что хотел создать игру с архитектурой клиент / сервер.

Итак, я прочитал несколько статей и так далее ... все этоработал до тех пор, пока я не попытался использовать те же классы и методы в клиенте проекта libGDX, а другой, поскольку сервер все еще был исходным проектом Java.

, после чего началось веселье, и я получил класс, не обнаруживший исключений на стороне сервера, когда сервер пытался прочитать объект.

, после этого я попытался построить клиент и сервер как проекты libGDX.,все та же ошибка.

подача:

package com.mygdx.game;

import java.io.IOException;
import java.net.*;


public class Server {

    public static void main(String[] args) {
        int port = 8800;
        try {
            ServerSocket serverSocket = new ServerSocket(port);
            while (true) {
                System.out.println("raedy");
                Socket clientSocket = serverSocket.accept();
                System.out.println(clientSocket+"verbunden!");
                Worker worker = new Worker(clientSocket);
                worker.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

}



package com.mygdx.game;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

public class Worker extends Thread{

    private Socket clientSocket;

    public  Worker(Socket clientsocket) {
        this.clientSocket = clientsocket;
    }
    @Override
    public void run() {
        System.out.println("worker started");
        try {
            ObjectInputStream in= new ObjectInputStream(clientSocket.getInputStream());
            Object obj = (Object) in.readObject();
            if(obj instanceof Message) {
            Message msg= (Message) in.readObject();
            System.out.println("Client said: "+msg.getMessage());
            }
            System.out.println("input auf"+clientSocket.getLocalPort());
            ObjectOutputStream out = new ObjectOutputStream(clientSocket.getOutputStream());
            out.writeObject(new Message("Hello there!"));
            System.out.println("output auf"+clientSocket.getPort());
        } catch (IOException | ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

package com.mygdx.game;
import java.io.Serializable;


public class Message implements Serializable{

    private static final long serialVersionUID = 1L;

    private String message;

    public Message(String message) {
        this.message = message;
    }

    public String getMessage(){
        return message;
    }
}

клиент имеет тот же класс сообщения и это:

package com.mygdx.game.desktop;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

import com.badlogic.gdx.backends.lwjgl.LwjglApplication;
import com.badlogic.gdx.backends.lwjgl.LwjglApplicationConfiguration;
import com.mygdx.game.MyGdxGame;

public class DesktopLauncher {
    public static void main (String[] arg) {
        int port = 8800;
        try {
            System.out.println("hello there!");
            Socket client = new  Socket("localhost", port );
            ObjectOutputStream out = new ObjectOutputStream(client.getOutputStream());
            out.writeObject(new Message("ich bin der client"));
            System.err.println(client.getPort());

            ObjectInputStream in = new ObjectInputStream(client.getInputStream());
            Message msg= (Message) in.readObject();
            System.out.println("Server said: "+msg.getMessage());
            System.out.println(client.getLocalPort());
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        LwjglApplicationConfiguration config = new LwjglApplicationConfiguration();
        new LwjglApplication(new MyGdxGame(), config);
    }
}

, поэтому мой вопроспочему тот же код работает в обычном Java, но когда я собираю то же самое, что и проект libGDX, и пробую код там, он не работает?

да, класс сообщений предназначен только для тестирования того, насколько сериализуемообъект передан.Позже я хочу отправлять игровые команды через поток объектов.

ps: вы сделали это до конца!спасибо: D

pps: первая попытка в Java была без

Object obj = (Object) in.readObject();
            if(obj instanceof Message)

1 Ответ

0 голосов
/ 11 июня 2018

Я бы порекомендовал вам использовать Kryonet вместо того, чтобы писать все с нуля.Он делает именно то, что вы пытаетесь достичь, является зрелым и хорошо протестирован с libGDX.

...