0

さて、私はShareItのようなソフトウェアを構築しようとしていますが、私はその中間にいるようです. 私が今まで行ってきたこと-サーバーがあらゆる種類のファイルをクライアントに送信できるプログラム(サーバーとクライアント側)を作成しました。このために、クライアントはサーバーのIPアドレスを持っている必要があります。しかし、知りたいのですが、リッスンしているサーバーのIPアドレスをクライアントが自動的に検索するにはどうすればよいですか? 毎回 IP アドレスを手動で入力するのではなく、使用可能でリッスンしているサーバーのすべての IP アドレスをクライアントが自動的に検出する方法を教えてください。前もって感謝します。

4

1 に答える 1

1

クライアントが作成したアクセス ポイントに接続すると、次のようにアクセス ポイントの IP アドレスを取得できます。

public static String getAccessPointIpAddress(Context context) {
    WifiManager wifiManager = (WifiManager) context.getSystemService(WIFI_SERVICE);
    DhcpInfo dhcpInfo = wifiManager.getDhcpInfo();
    byte[] ipAddress = convert2Bytes(dhcpInfo.serverAddress);
    try {
        String ip = InetAddress.getByAddress(ipAddress).getHostAddress();
        return ip.replace("/", "");
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    return null;
}

private static byte[] convert2Bytes(int hostAddress) {
    byte[] addressBytes = {(byte) (0xff & hostAddress),
            (byte) (0xff & (hostAddress >> 8)),
            (byte) (0xff & (hostAddress >> 16)),
            (byte) (0xff & (hostAddress >> 24))};
    return addressBytes;
}

アクセス ポイントを作成する送信者/受信者は、ホスト名としての IP アドレスで ServerSocket を開始します。ただし、クライアントにはポート番号が必要です。両側にハードコーディングするか、SSID をエンコードしてポート番号を埋め込むことができます。

また、ファイル共有と転送を支援するため、つまり SHAREit の動作をシミュレートするために、SHAREthemというライブラリを作成しようとしました。また、このブログでは実装の詳細について説明しています。

于 2017-01-10T08:05:17.707 に答える