2

クライアントとサーバーを作成しましたが、どちらも問題なく動作し、接続に問題はありません。Androidフォンからサーバーに接続できるようにしたいと思います。kryonet ライブラリをインポートし、クライアント コードをコピーして新しい Android プロジェクトに貼り付けました。コードでいくつかのエラーが発生しましたが、修正しました。アプリをテストしようとしたとき、エラーは発生しませんでしたが、サーバーにも接続がありませんでした。LogCat ログを少し調べたところ、「接続中..」のままであることがわかりました。私は完全に立ち往生しています。これは私のアンドロイドコードです:

public void openSocket(View view){
    Log.i(TAG, "test1");
    EditText portText= (EditText)findViewById(R.id.port);
    String parts[] = portText.getText().toString().split(":");
    partIP = parts[0];
    String partPort = parts[1];
    port = Integer.parseInt(partPort);

    try {
        client = new Client();
        client.start();
        register();
        pHandler = new PacketHandler();
        connect();
    } catch (Exception e) {
        pHandler.checkException(e);
    }
}
public static void register() {
    client.getKryo().register(Packet.class);
    client.getKryo().register(Packet1Connected.class);
    client.getKryo().register(String.class);
    client.getKryo().register(String[].class);
    client.getKryo().register(Object[].class);
}
public static void connect() {
    try {
        String IP = "*MY IP*:25565";
        String[] Ip = IP.split(":");
        String ipFinal = Ip[0];
        int port = Integer.parseInt(Ip[1]);

        client.connect(5000, ipFinal, port, port);
    } catch (IOException e) {
        try {
            Thread.sleep(15000);
        } catch (InterruptedException e2) {
            e2.printStackTrace();
        }
        System.out.println("Trying to connect.");
        connect();
    }

    Packet1Connected packet = new Packet1Connected();
    packet.id = "Android";

    client.sendTCP(packet);
}

そして、これは私の通常のクライアントコードです:

public static void main(String[] args) {
        try {
            client = new Client();
            client.start();
            register();
            pHandler = new PacketHandler();
            new Main();
        } catch (Exception e) {
            pHandler.checkException(e);
        }
    }

    public static void register() {
        client.getKryo().register(Packet.class);
        client.getKryo().register(Packet1Connected.class);
        client.getKryo().register(String.class);
        client.getKryo().register(String[].class);
        client.getKryo().register(Object[].class);
    }

    public Main() {
        try {
            connect();
            Thread t = new Thread(this);
            t.start();
        } catch (Exception e) {
            pHandler.checkException(e);
        }
    }

    public static void connect() {
        try {
            String IP = "*MY IP*:25565";

            String[] Ip = IP.split(":");
            String ipFinal = Ip[0];
            int port = Integer.parseInt(Ip[1]);

            client.connect(5000, ipFinal, port, port);
        } catch (IOException e) {
            try {
                Thread.sleep(15000);
            } catch (InterruptedException e2) {
                e2.printStackTrace();
            }
            System.out.println("Trying to connect.");
            connect();
        }

        Packet1Connected packet = new Packet1Connected();
        packet.id = System.getProperty("user.name");

        client.sendTCP(packet);
    }

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(3000);
                if (!client.isConnected()) 
                    connect();
            } catch (InterruptedException e) {
                pHandler.checkException(e);
            }
        }
    }

}

したがって、この:

    client.connect(5000, ipFinal, port, port);

Androidでスタックする行です。通常のクライアントは通常どおり接続します。

今私の質問は、私のAndroidコードに何か問題がありますか、それとも単にデバイスまたはwifi接続ですか?

それが役立つ場合は、ルート化されているサムスン ギャラクシー ネクサスでテストしてみました。

前もって感謝します。

4

0 に答える 0