Как ShareIt работает на ПК?
Ну, я пытаюсь создать программное обеспечение, подобное ShareIt, но мне кажется, что я нахожусь между ними. То, что я делал до сих пор - я создал программу (серверную и клиентскую), где сервер может отправлять клиенту любой тип файла, и для этого клиент должен иметь IP-адрес сервера. Но я хотел бы знать - как клиент может автоматически искать IP-адрес сервера, который прослушивает? Я не хочу вводить IP-адрес вручную каждый раз, вместо этого, как клиент автоматически определяет все IP-адреса серверов, которые доступны и прослушивают? Заранее спасибо.
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;
}
Отправитель / получатель, который создает точку доступа, запускает ServerSocket на своем IP-адресе как имя хоста. Но клиенту необходим номер PORT, вы можете либо жестко закодировать его с обеих сторон, либо кодировать SSID, чтобы встроить в него номер порта.
Также я попытался написать библиотеку под названием SHAREthem, чтобы помочь с совместным использованием и передачей файлов, или, другими словами, она имитирует работу SHAREit. Также этот блог объясняет детали реализации. Надеюсь, это поможет.