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 method comprising: detecting by a discovery client whether a discovery server is present; in a detected absence of any discovery server, conducting discovery by the discovery client as a multicast operation; in a detected presence of any discovery server, suppressing by the discovery client of its multicast operation and conducting discovery by the discovery client directed to the detected discovery server; and continuing by the discovery responders to respond to multicast discovery regardless of the presence or absence of the discovery server in the network environment.