The client-server model or client-server architecture is a distributed application framework that divides tasks between servers and clients communicating in the same system or via a computer network. The client relies on another program to send a request to access a service provided by a server. The server runs one or more programs that share resources with clients and distribute tasks among clients. The client-server relationship communicates through a request-response messaging model and adheres to a common communication protocol that formally defines the rules, language, and dialogue models to be used.