Обнаружение услуги Wi-Fi P2P с разных платформ - PullRequest
0 голосов
/ 22 февраля 2019

Я разрабатываю приложение для Android, которое использует WiFi Direct для обнаружения сервисов.Я следую за документацией, и все это работает.Чтобы создать службу:

private void startRegistration() {
    //  Create a string map containing information about your service.
    Map record = new HashMap();
    record.put("listenport", String.valueOf(SERVER_PORT));
    record.put("buddyname", "John Doe" + (int) (Math.random() * 1000));
    record.put("available", "visible");

    // Service information.  Pass it an instance name, service type
    // _protocol._transportlayer , and the map containing
    // information other devices will want once they connect to this one.
    WifiP2pDnsSdServiceInfo serviceInfo =
            WifiP2pDnsSdServiceInfo.newInstance("_test", "_presence._tcp", record);

    // Add the local service, sending the service info, network channel,
    // and listener that will be used to indicate success or failure of
    // the request.
    manager.addLocalService(channel, serviceInfo, new ActionListener() {
        @Override
        public void onSuccess() {
            // Command successful! Code isn't necessarily needed here,
            // Unless you want to update the UI or add logging statements.
        }

        @Override
        public void onFailure(int arg0) {
            // Command failed.  Check for P2P_UNSUPPORTED, ERROR, or BUSY
        }
    });
}

А затем код, чтобы обнаружить его на другом устройстве:

final HashMap<String, String> buddies = new HashMap<String, String>();
// ...
private void discoverService() {
    DnsSdTxtRecordListener txtListener = new DnsSdTxtRecordListener() {
    @Override
    /* Callback includes:
     * fullDomain: full domain name: e.g "printer._ipp._tcp.local."
     * record: TXT record dta as a map of key/value pairs.
     * device: The device running the advertised service.
     */

    public void onDnsSdTxtRecordAvailable(
            String fullDomain, Map record, WifiP2pDevice device) {
            Log.d(TAG, "DnsSdTxtRecord available -" + record.toString());
            buddies.put(device.deviceAddress, record.get("buddyname"));
        }
    };
}

И все это работает.Но что, если я захочу обнаружить службу, исходящую с компьютера с Windows?Или устройство iOS?Я не думаю, что мой DnsSdTxtRecordListener найдет их, чтобы я мог видеть записи / переменные службы.Есть ли способ добиться этого?

Я посмотрел документацию по созданию (WiFi Direct) сервисов на компьютере с Windows, и способ его реализации немного отличается ... поэтому я не уверен, что я 'я пытаюсь сделать это достижимо?

...