не запускается kryonet сервер на android устройстве

Я сейчас занимаюсь разработкой небольшой android игры на движке libGDX и решил сделать мультиплеер в игре. Для реализации этой цели я решил воспользоваться kryonet и написать небольшой сервер. Когда я запускаю приложение на ПК, сервер спокойно запускается, но, когда приложение запускается на android устройстве или на android эмуляторе, сервер не запускается, и приложение не падает. Вот код экрана в котором происходит запуск сервера и реализации клиента и сервера

package com.mygdx.game.Screens;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Screen;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.utils.Align;
import com.esotericsoftware.kryonet.Client;
import com.esotericsoftware.kryonet.Server;
import com.mygdx.game.Main;
import com.mygdx.game.Multiplayer.ClientListener;
import com.mygdx.game.Multiplayer.PacketMessage;
import com.mygdx.game.Multiplayer.ServerListener;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import java.io.IOException;
import java.net.InetAddress;
import java.util.List;

public class WaitingScreen implements Screen {

    private Main game;
    private String map;
    private String fighter;
    private Server server;
    private Stage stage;
    private Label label;
    private BitmapFont font;
    private float WIDTH = Gdx.graphics.getWidth();
    private float HEIGHT = Gdx.graphics.getHeight();

    public WaitingScreen(String state, String map, String fighter, Main game) throws IOException {
        this.game = game;
        this.map = map;
        this.fighter = fighter;

        if (state == "server") {
            createServer();
        } else if (state == "client") {
            createClient();
        }

        init();
    }

    private void init() {
        font = new BitmapFont(Gdx.files.internal("Font/font.fnt"));
        font.getData().setScale(2);
        Label.LabelStyle labelStyle = new Label.LabelStyle();
        labelStyle.font = font;

        label = new Label("Waiting", labelStyle);
        label.setAlignment(Align.center);
        label.setWidth(WIDTH);

        stage = new Stage();

        label.setPosition(0, HEIGHT / 2 - label.getHeight() / 2);
        stage.addActor(label);

        preRender();
    }

    private void preRender() {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.draw();
    }

    private void createClient() throws IOException {
        Client client = new Client();
        client.getKryo().register(PacketMessage.class);
        client.addListener(new ClientListener(game, fighter, map));
        client.start();

        boolean connected = false;

        int c = 0;
        while (!connected) {
            if (c == 2) {
                noServersFound();
                c = 0;
                break;
            }
            List<InetAddress> addressList = client.discoverHosts(54777, 3000);
            System.out.println(addressList);
            for (int i = 0; i < addressList.size(); i++) {
                try {
                    client.connect(3000, addressList.get(i), Main.tcpPort, Main.udpPort);
                    connected = true;
                    break;
                } catch (Exception e) {
                    Gdx.app.log("Exception"," in connecting");
                }
            }
            c++;
        }

        PacketMessage request = new PacketMessage();
        request.text = Main.newPlayerEvent;

        client.sendTCP(request);
    }

    private void noServersFound() {
        label.setText("No games were found");
    }

    private void createServer() throws IOException {
        server = new Server();
        server.bind(Main.tcpPort, Main.udpPort);
        server.getKryo().register(PacketMessage.class);
        server.addListener(new ServerListener(game, fighter, map));
        server.start();
    }

    @Override
    public void show() {

    }

    @Override
    public void render(float delta) {
        Gdx.gl.glClearColor(0, 0, 0, 1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
        stage.draw();
    }

    @Override
    public void resize(int width, int height) {

    }

    @Override
    public void pause() {

    }

    @Override
    public void resume() {

    }

    @Override
    public void hide() {

    }

    @Override
    public void dispose() {

    }
}

сервер:

package com.mygdx.game.Multiplayer;

import com.badlogic.gdx.Gdx;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.mygdx.game.Main;
import com.mygdx.game.Screens.PlayScreen;

public class ServerListener extends Listener {

    private Main game;
    private String fighter;
    private String map;

    public ServerListener(Main game, String fighter, String map) {
        this.game = game;
        this.fighter = fighter;
        this.map = map;
    }

    public void received(Connection connection, Object object) {
        if (object instanceof PacketMessage) {
            PacketMessage message = (PacketMessage) object;
            Gdx.app.log("New Message on server: ", message.text);

            if (message.text.equals(Main.newPlayerEvent)) {
                Gdx.app.log("New screen: ", "PlayScreen");

                game.setScreen(new PlayScreen(game, fighter, map));

                PacketMessage mapResponse = new PacketMessage();
                mapResponse.text = String.format("map: %s", map);
                connection.sendTCP(mapResponse);

                PacketMessage eventResponse = new PacketMessage();
                eventResponse.text = "start_game_event";
                connection.sendTCP(eventResponse);
            }
        }
    }
}

и клиент:

package com.mygdx.game.Multiplayer;

import com.badlogic.gdx.Gdx;
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.mygdx.game.Main;
import com.mygdx.game.Screens.PlayScreen;

public class ClientListener extends Listener {

    private Main game;
    private String fighter;
    private String map;

    public ClientListener(Main game, String fighter, String map) {
        this.game = game;
        this.fighter = fighter;
        this.map = map;
    }

    public void received(Connection connection, Object object) {
        if (object instanceof PacketMessage) {
            PacketMessage message = (PacketMessage) object;
            Gdx.app.log("New Message on client: ", message.text);

            if (message.text == "start_game_event") {
                game.setScreen(new PlayScreen(game, fighter, map));
            }

            if (message.text.startsWith("map: ")) {
                map = message.text.replace("map: ", "");
            }
        }
    }
}

Ответы (0 шт):