In general terms a client receives a service of some sort from a server. As applied to computing, the relationship between the clients and the servers is formalized so as to allow different aspects of a computational task to be subdivided among a server, which acts as an agent on behalf of the end-puser, and a collection of clients for the service(s) offered by that server. Each client needs to bring about the completion of a set of activities that represent components of a complete computational task; the client achieves this by requesting services from the collection of servers for each separate activity. Clearly it may be necessary to complete some activities before others can be started, while it may be possible to allow some activities to be run in any order or to be run all at the same time. When a client calls on a server to perform a service, the client will indicate the service to be carried out and the details of the way in which the server should respond to the client when the service is completed. The response from the server may indicate successful conclusion, together with the value of the result, or may indicate some form of failure. The role of the client is to combine the responses from the servers, and to ensure that the separate subactivities are run in such a way as to observe any necessary constraints on the order in which they are initiated or completed.
It is not necessary for the clients and the servers to be running on the same computer system. Indeed, the use of client/server systems is especially effective where many users on a network require a range of different services, which can be best supplied by the use of a specialized hardware configuration provided at a small number of locations on the network.
Many of the ideas underlying client/server computing were first given a firm definition in the X Windows system. See also interprocess communication, remote procedure call.