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 以在其上嵌入端口号。

此外,我还尝试编写一个名为SHAREthem的库来帮助文件共享和传输,或者换句话说,它模拟 SHAREit 的工作方式。博客还解释了实现细节希望它有所帮助。

于 2017-01-10T08:05:17.707 回答