好吧,我正在尝试构建一个像 ShareIt 这样的软件,但似乎我介于两者之间。到目前为止我所做的 - 我制作了一个程序(服务器和客户端),服务器可以将任何类型的文件发送到客户端,为此客户端必须具有服务器的 IP 地址。但我想知道——客户端如何自动搜索正在监听的服务器的 IP 地址?我不想每次都手动输入IP地址,而是客户端如何自动检测所有可用并正在侦听的服务器的IP地址?提前致谢。
问问题
423 次
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 回答