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