每个网络应用都是基于客户端-服务端模型的。根据这个模型,一个用用是由一个服务器和一个或多个客户端组成的。服务器管理资源,以某种方式操作资源,为客户端服务。例如,一个Web服务器管理着一组磁盘文件,它会代表客户端进行检索和执行。
客户端-服务端模型中的基本操作是事务。一个客户端-服务器事务由以下四步组成:
1、当一个客户端需要服务时,它向服务器发送一个请求,发起一个事务。
2、服务器收到请求后,解释它,并以适当的方式操作它的资源
3、服务器给客户端发送一个响应,并等待下一个请求
4、客户端收到响应并处理它
客户端和服务器通过因特网这个全球网络来通信。从程序员的观点来看,我们可以把因特网看成是一个全球范围的主机集合,具有以下几个属性:
1、每个因特网主机都有一个唯一的32位名字,称为它的IP地址。IP地址通常是以一种成为点分十进制表示法来表示,其中每个字节由它的十进制表示,并用句点和其他字节分开。
2、IP地址的集合被映射为一个因特网域名的集合。
3、不同因特网主机上的进程能够通过连接互相通信。
客户端和服务器通过使用套接字接口建立连接。一个套接字是连接的一个端点,每个套接字都有相应的套接字地址,是由一个因特网地址和一个16位的整数端口组成的,用“地址:端口”来表示。
一个连接是由它两端的套接字地址唯一确定的。
常见的几个函数作用:
socket函数:客户端和服务器使用socket函数类创建一个套接字描述符。
connect函数:客户端调用connect函数来建立和服务器的连接。
bind函数:告诉内核将addr中的服务器套接字地址和套接字描述符sockfd联系起来。
listen函数:将sockfd从一个主动套接字转换为一个监听套接字,该套接字可以接受来自客户端的连接请求。
accept函数:服务器通过调用accept函数来等待来自客户端的连接请求。
Web服务器使用HTTP协议和它们的客户端彼此通信。浏览器向服务器请求静态或动态的内容。对静态内容的请求时通过从服务器磁盘取得文件并把它返回给客户端来服务的。对动态内容的请求时通过在服务器上一个子进程的上下文中运行一个程序并将它的输出返回给客户端来服务的。