1

私のPCにはサーバープログラムがあり、Androidクライアントを実行して待っています。

これらを Android コードで設定します。

mHost      = "127.168.1.1"; //or getLocalIpAddress()?
mPort      = 5000;
mSocket    = new Socket(mHost, mPort);

マニフェストに次のアクセス許可を設定します。

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

PC に接続しようとすると、次の logcat 出力が表示されます。

10-08 19:18:40.970: E/ex closeInputOutput(8735): java.lang.NullPointerException
10-08 19:18:40.970: E/doInBackground Exception(8735):  java.net.ConnectException: failed to connect to /127.168.1.1 (port 5000): connect failed: ECONNREFUSED (Connection refused)

ルーターを持っていますが、PC を 127.168.1.1:5000 に接続するにはどうすればよいですか?

編集:

public static final String getLocalIpAddress() {
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
                InetAddress inetAddress = enumIpAddr.nextElement();
                String ip4 = inetAddress.getHostAddress().toString();
                if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ip4)) {
                    Log.d(TAG, "getLocalIpAddress(): " + ip4);
                    return ip4;
                }
            }
        }
    }
    catch (Exception e) {
        Log.e(TAG, "ServerUtils: getLocalIpAddress(): " + e.getMessage());
    }
    return null;
}

これは私の新しいコードです。これは 192.168.1.104 を返しますが、動作していません。私の ipconfig で 192.168.1.102 を取得します (これが正しいです)。では、最後のコードで何が間違っているのでしょうか? 正しいローカル IP を取得するにはどうすればよいですか?

4

3 に答える 3

3

127.168.1.1はデフォルトでループバック範囲にあるため、接続の試行がAndroidデバイスを離れていない可能性があります。サーバーを192.168.xxIPに配置してみてください

http://www.tcpipguide.com/free/t_IPReservedPrivateandLoopbackAddresses-3.htm

于 2012-10-08T17:39:37.890 に答える
2

LAN によって異なる場合がありますが、通常、アドレス 192.168.1.1 はルーター アドレスです (ホスト アドレスではありません)。

次のコマンドを実行して、ホスト アドレスを確認します。

ipconfig

コマンドプロンプトで。IPv4 アドレスがホスト アドレスになり、ゲートウェイ アドレスがルーター アドレスになります。PC とデバイスの両方で正しいアドレスを使用してください。

注: より正確なヘルプが必要な場合は、コードの関連部分を PC とデバイスの両方に投稿する必要があります。

--編集済み--

IP アドレスはホーム アドレスのようなもので、各デバイスには独自のアドレスがあります。そのため、Windows マシンで ipconfig を実行すると、Windows マシンの IP アドレスが取得されます。デバイス上の を呼び出すとgetLocalIpAddress()、デバイスの IP アドレスが取得されます。

デバイスから PC に接続する場合は、次のことを行う必要があります。

  • ポート 5000 をリッスンするプログラムを PC で実行します。このポートでリッスンするプログラムがない場合、このポートへの接続試行はすべて拒否されます。
  • 192.168.1.102デバイスで、ポートで(PC IPアドレス)に接続するプログラムを実行します5000
于 2012-10-08T17:38:18.570 に答える
1

それがファイアウォールの問題です...ルーターのファイアウォールまたはシステムのファイアウォールに移動し、5000ポートを例外リストに追加します...インバウンドとアウトバウンドも....そして2番目の問題はIPアドレスにあるようです。 .. 127は使用可能なクラスではありません...ループバックテストです(127.0.0.1から127.255.255.254 ...)アドレスを127から192.168.0.1または1.1に変更します...

于 2012-10-08T17:47:49.993 に答える