Как 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. Также этот блог объясняет детали реализации. Надеюсь, это поможет.

Другие вопросы по тегам