1. A method of reliably discovering devices and services with ad-hoc and server-based operation in a network environment of devices acting as discovery clients and discovery responders, the discovery responders each providing one or more services, at least some of the services being non-unique to a particular device, the method comprising: detecting by a device operating as a discovery client whether a discovery server is present; in a detected absence of any discovery server by said device, conducting discovery of services of discovery responders by said device operating as the discovery client as a multicast operation; in a detected presence of any discovery server by said device, said device switching to a server-based discovery mode of operation in which said device operates by: suppressing by said device when operating as the discovery client of its multicast operation and conducting discovery of services of discovery responders by said device when operating as the discovery client directed to the detected discovery server; and continuing by said device when operating as one of the discovery responders to respond to multicast discovery only of said device's own services regardless of the presence or absence of the discovery server in the network environment.