ShareIt如何适用于PC?

时间:2016-06-30 17:37:46

标签: java server client p2p peer

好吧,我正在尝试构建一个像ShareIt这样的软件,但似乎我感到震惊。 我到目前为止做了什么 - 我创建了一个程序(服务器和客户端),服务器可以将任何类型的文件发送到客户端,为此客户端必须具有服务器的IP地址。 但我想知道 - 客户端如何自动搜索正在监听的服务器的IP地址? 我不想每次都手动输入IP地址,而是客户端如何自动检测可用且正在监听的服务器的所有IP地址? 提前谢谢。

1 个答案:

答案 0 :(得分: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作为主机名。但客户端需要一个PORT编号,您可以对其进行硬编码或编码SSID以在其上嵌入端口号。

此外,我还尝试编写一个名为 SHAREthem 的图书馆,以帮助解决文件共享问题。转移或换句话说,它模拟SHAREit如何工作。此外,this博客还解释了实施细节 希望它有所帮助。