Discovery of OSC Clients and Servers on a Local Network

The state of the art for discovery of other OSC clients on the local network (so that users don't have to manually type in port numbers and IP addresses) is to use
ZeroConf also known as Rendezvous or Bonjour as implemented by Apple.

People have used the following two Service Type Strings:

  • _osc._udp.
  • _osc._tcp.

These should be registered at http://www.dns-sd.org/ServiceTypes.html as soon as we figure out the "List of defined TXT record keys" we want to propose.

Currently we are aware of only two (and a half) implementations of OSC discovery via ZeroConf, all on OSX:

There are two aspects: "advertising", i.e., announcing that you are an OSC server, and "discovery", looking on the local network for other OSC servers. Bonjour Browser for OSX is a good example of the latter, in the general case of looking for all ZeroConf services.

There should be sample code (here) showing how to implement both of these tasks on "all three" platforms:

  • OSX with Apple License: If you have installed the OSX Developer's Tools then you'll have examples of advertising and discovery of ZeroConf in general (with nothing OSC-specific) in "/Developer/Examples/Foundation/PictureSharing/" and "/Developer/Examples/Foundation/PictureSharingBrowser", respectively.
  • OSX with LGPL License: mDNSResponder
  • Linux: AVAHI (LGPL, http://www.avahi.org) is the reference implementation for Linux. Also check out http://zeroconf.sourceforge.net
  • Windows mDNSResponder

The Code for mDNSResponder (requires an Apple ID if you haven't it yet) which uses Apple Open Source License: http://developer.apple.com/opensource/internet/bonjour.html

The Bonjour Home at apple with binary downloads for windows:
http://developer.apple.com/networking/bonjour/index.html

Some things to know when writing to the (OSX) ZeroConf API:

    There are "browser" objects that continuously keep an eye on the local network, seeing which ZeroConf services are available, and calling your callbacks to inform you of new services and newly-unavailable old services.

    A "browser" might inform you two or more times about the same server providing the same service, in which case you'll get an equal number of matching invocations of the "this service went away" callback. Why? Chandrasekkhar Ramakrishnan explains: if you have multiple active network interfaces (e.g., ethernet and AirPort), then you may get duplicates if the service is reachable by both NICs. At least, that was the case when I implemented that... perhaps that's changed.

Ross Bencina's OSCGroups addresses discovery.

Emmanuel Flety's WiseBox has a kludge for discovery based on sending a broadcast OSC message with the device's MAC address.