-1

私は日食で基本的なサーバーを作りました:

Server server;
int tcp = 8885, udp = 8885;

public ServerMain() {
    server = new Server();
    server.addListener(new Listener() {
        public void connected(Connection c) {
            System.out.println("Connection made");
        }

        public void received(Connection c, Object p) {

        }

        public void disconnected(Connection c) {
            System.out.println("Disconnection made");
        }
    });
    server.start();
    try {
        server.bind(tcp, udp);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    new ServerMain();
}

次に、Androidスタジオでクライアントを作成しました。ライブラリを正しくインストールしました。(Google によると) Kryonet jar を libs フォルダーに入れ、プロジェクトを再構築しました。その後、Kryonet クラスを使用できます。私のクライアント用のコードは次のとおりです。

Client client;
String ip = "MY.IP.ADDRESS";
int tcp = 8885, udp = 8885;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.i(TAG, "Start");

    client = new Client();
    client.addListener(new Listener() {
        public void received(Connection c, Object p) {

        }
    });
    client.start();
    try {
        client.connect(5000, ip, tcp, udp);
        Log.i(TAG, "conected");
    } catch(IOException e) {

        Log.i(TAG, "Error: " + e.getMessage());

    }
}

これは、通常の Java クライアントで使用するコードとまったく同じですが、現在は Android デバイスから直接実行されています。次のエラーが表示されます。

Error: Unable to connect to: /MY.IP.ADDRESS:8885

ポート転送してもIPに接続できません。どうして繋がらないの?これをマニフェストファイルに追加するためにオンラインで読みました:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />

だから、私はした:

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

それでもまったく役に立たない。私は何を間違っていますか?(PSネットワークIPとパブリックIPの両方で試しました。何が間違っているのかわかりません。通常のJavaプログラムではすべて正常に動作しますが、Androidアプリではバグアウトします。)

4

1 に答える 1

2

このコードを試してみてください。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Log.i(TAG, "Start");

    client = new Client();
    client.addListener(new Listener() {
            public void received(Connection c, Object p) {

            }
    });
    client.start();
    new ConnectToServer.execute();


    }
public class ConnectToServer extends AsyncTask<String, int[], String>
{
    @Override
    protected String doInBackground(String... arg0) {
        // TODO Auto-generated method stub
        try {
             client.connect(5000, ip, tcp, udp);
             Log.i(TAG, "conected");
        } catch(IOException e) {

        Log.i(TAG, "Error: " + e.getMessage());
        return null;
    }
}

}

于 2015-06-27T13:12:03.507 に答える