在网络编程中(同样在其它形式的通讯中例如数据库编程)使用套接字的应用程序也被分为两类客户端程序和服务器程序你可能对客户端/服务器编程术语比较熟悉尽管这个术语的准确意思你不一定清楚下面的范例就是讨论这个主题
客户端/服务器范型
客户端/服务器范型把软件分为两类客户端程序和服务器程序客户端软件启动一个连接并发送请求而服务器软件监听连接并处理请求在UDP编程环境中没有建立实际的连接并且UDP应用程序可以在相同的套接字上建立并接收请求在TCP环境中两台计算机之间建立了连接客户端/服务器范型是相对应的
当软件作为客户端或者服务器的时候它严格地定义了角色以更容易适应我们所熟悉的思维模型软件要么启动请求要么处理请求在两种角色之间切换使系统更加复杂即使允许切换在某个特定的时刻软件程序也只能是客户端而另一个必须是服务器如果两个同时是客户端就没有服务器处理请求了
客户端/服务器范型是一个重要的理论概念它广泛用于实际应用程序中目前也有其它的通讯模型例如对等(peer to peer)模型在这种模型中每一方都可以启动通讯但是客户端/服务器概念是更加流行的选择因为它很简单并且在多数网络编程中使用
网络客户端
网络客户端启动连接通常处理网络事务服务器程序用于实现客户端的请求客户端不用实现服务器的请求尽管客户端处于控制地位但是服务器端仍然有一些功能客户端可以要求服务器删除本地文件系统的所有文件但是服务器并不是必须执行这个任务的
网络客户端使用双方都同意的通讯标准(即网络协议)与服务器对话例如HTTP客户端使用的命令组就与邮件客户端使用的不同而且目的也完成不同把HTTP连接到邮件服务器或邮件客户端连接到HTTP服务器要么会出现一个错误消息要么出现一个客户端不能理解的错误消息因为这个原因作为协议规格的一部分必须使用某个端口号这样客户端才能定位服务器Web服务器通常运行在端口上而其它一些服务器可能运行在非标准的端口上URL的习惯是不列出端口的它假定使用端口
网络服务器
网络服务器的角色是绑定某个特定的端口(客户端使用它定位服务器)并且监听新的连接尽管客户端是临时的并且只有在用户选中的时候才运行但是服务器程序必须不间断地运行(即使实际上没有已连接的客户端)期望某个客户端在某个时刻需要该服务服务器程序通常作为数据自适应监视器进程引用使用Unix用法它持久的运行而且一般在该服务器程序的主机启动时启动因此服务器一直等待直到某个客户端建立到该服务器端口的连接有些服务器程序在某个时刻只能处理单个连接其它一些服务器程序可以通过使用多线程同时处理多个连接
当开始连接后服务器就服从客户端它等待客户端发送请求并且忠实地处理它们(可是服务器可以响应错误信息特别是当请求违反某些重要地协议规则或有安全风险的时候)某些协议(例如HTTP/)通常在每个连接中只允许一个请求而其它一些协议(例如POP)支持一系列请求服务器可以通过发送响应或错误消息应答客户端的请求学习新的网络协议(编写客户端或服务器)与学习一种新的语言相似只是语法改变了但是典型情况下它的命令的数量更小使事情更简单服务器的行为一部分由协议决定一部分由开发者决定(某些命令是可选的服务器不一定支持)