Bonsoir icon indicating copy to clipboard operation
Bonsoir copied to clipboard

iOS cannot discover a host running on Windows

Open gomaze1031 opened this issue 1 year ago • 12 comments

Describe the bug iOS cannot discover a host running on Windows.

I tested as follows:

  1. Connect all devices to the same WiFi (and checked they are assigned to 192.168.0.x)
  2. Start hosting on Windows and macOS
  3. iOS discovers a host running on macOS
  4. iOS cannot discover a host running on Windows
  5. Android discovers a host running on macOS and Windows

Version info:

  • Bonsoir 5.1.8
  • Windows 10 22H2(19045.3930)
  • macOS 14.2.1
  • iOS 17.2.1
  • Android 14

FYI, there is no errors or other logs printed. Not sure it is a bug. Thanks for your nice work!

gomaze1031 avatar Feb 07 '24 03:02 gomaze1031

Are you sure you're discovering the correct type ? Do you have a snippet or something ?

Skyost avatar Feb 07 '24 10:02 Skyost

I think I discovered the correct type. Here are some snippets.

startDiscovery()

_dnsHost = BonsoirBroadcast(
  service: BonsoirService(
    name: "my_bonsoir_server",
    type: "_dns-service._tcp",
    port: 56000,
  ),
);

await _dnsHost?.ready;
await _dnsHost?.start();

startScan()

BonsoirDiscovery discovery = BonsoirDiscovery(type: "_dns-service._tcp");
_mDnsDiscovery.discovery = discovery;
await discovery.ready;

discovery.eventStream!.listen((event) async {
  if (event.type == BonsoirDiscoveryEventType.discoveryServiceFound) {
    debugPrint('Service found : ${event.service?.toJson()}');

    if (event.service is ResolvedBonsoirService) {
      ...
      return;
    }

    // Should be called when the user wants to connect to this service.
    await event.service!.resolve(discovery.serviceResolver);
  } else if (event.type == BonsoirDiscoveryEventType.discoveryServiceResolved) {
    debugPrint('Service resolved : ${event.service?.toJson()}');
    ...
  } else if (event.type == BonsoirDiscoveryEventType.discoveryServiceLost) {
    debugPrint('Service lost : ${event.service?.toJson()}');
    ...
  }
});

await discovery.start();

Not sure it helps you but this is all I've got.

  • Side question: when the event.type is "discoveryServiceFound", event.service can be "ResolvedBonsoirService"?

gomaze1031 avatar Feb 13 '24 06:02 gomaze1031

Side question: when the event.type is "discoveryServiceFound", event.service can be "ResolvedBonsoirService"?

Nop !

Skyost avatar Feb 14 '24 20:02 Skyost

I am running into this same issue:

  • Windows, Mac and Linux apps are using Bonsoir to broadcast, Android and iPhone apps are using Bonsoir to discover
  • All devices are on the same Wi-Fi network running the same version of Bonsoir
  • Android sees all three broadcasts, iPhone sees two, missing Windows
  • No Windows discovery events show up on the iPhone
  • Both phones successfully resolve the hosts they see

Versions:

  • Bonsoir 5.1.8
  • Windows 11 Pro 23H2 (22631.3155)
  • macOS 14.3.1
  • Linux Ubuntu 22.04.3 LTS (Avahi Daemon 0.8)
  • iOS 15.7.9
  • Android 13

jaween avatar Mar 08 '24 12:03 jaween

Hey,

This could be the same problem than https://stackoverflow.com/questions/60925721/my-ios-macos-devices-are-unable-to-resolve-my-bonjour-zeroconf-service-created-o. Does it work with a ResolvedBonsoirService ?

Skyost avatar Mar 10 '24 06:03 Skyost

(Sorry maybe I'm misunderstanding)

With the link it looks like they used an npm package to broadcast a bonjour service which iOS discovered sucessfully, but couldn't resolve it without an extra parameter in the broadcast. But in our case iOS is not even discovering the service.

ResolvedBonsoirService works with the discovered Mac and Linux services, and I assume if the Windows service was discovered, it would work too.

jaween avatar Mar 10 '24 14:03 jaween

You're right, I've misread the SO post. I'll continue to investigate on my side, but feel free to post here if you got something new.

Skyost avatar Mar 11 '24 09:03 Skyost