拨号调制解调器_调制解-hds ams 2500用户手册
18.3 程序设计,我们来分析一下调制解调器拨号器所应该具有的特性:
(1) 它必须在不改动源码的情况下支持新增加的调制解调器类型。为了达到这个目标,我们使用了Honey DanBer的Dialers文件。我们将所有使用这个文件来拨号调制解调器的代码都放到一个精灵进程服务器中,这样任何程序都可以使用15.5节中的客户机-服务器函数来访问它。
(2) 一定要使用一些特定形式的锁,以保证当那些持有锁的程序在非正常结束时能自动释放它的锁。以前那些专门的技术,如那些在大多数cu和UUCP版本中仍然使用的技术,都不应再使用。我们用一个服务器精灵进程来处理所有的设备加锁。因为15.5节中的客户机-服务器函数会在客户机终止时自动通知服务器,所以这个精灵进程能释放进程所持有的任何加锁。
(3) 新的程序一定要能够使用我们所开发的所有特性。开发一个新的处理调制解调器的程序不应当什么都要自己实现,它拨任何类型的调制解调器应该就像函数调用一样简单方便。为此,我们让中央服务器精灵进程处理所有与拨号有关的操作,并返回一个文件描述符。
(4) 客户机程序,例如cu和tip,不应当需要特别权限。这些程序不应当是设置-用户-ID程序。但是要给予服务器精灵进程特殊权限,允许客户机程序运行时无需特权。显然我们不能改动已有的cu、tip和UUCP程序,但应该让其他程序在我们工作的基础上实现起来更加简单。当然,我们也一定要充分吸取已有的UNIX拨号程序的优点。
图18-1描述了客户机-服务器工作模式的结构。
图18-1客户机-服务器工作模式示意图建立与远程系统的通信过程如下:
(1) 起动服务器。
(2) 客户机起动,使用cli_conn函数(见15.5节)建立与服务器的连接。客户机向服务器发出一个请求,请求拨号远程系统。
(3) 服务器读取Systems、Devices和Dialers配置文件来决定如何拨号远程系统(下一节将讲述这些文件)。如果正使用一个调制解调器,在对应的Dialers配置文件中就包含了这个特定调制解调器的所有命令。
(4) 服务器打开该调制解调器设备并拨号该调制解调器。这需要一些时间(一般为15~30秒)。服务器处理所有对该调制解调器的加锁,以避免各用户间的冲突。
(5) 如果拨号成功,服务器返回一个该调制解调器设备的文件描述符给客户机。在15.3节中的函数可以发送和接受这个描述符。
对于更多关于客户机-服务器通信模拟的详细信息,可以参考 客户机服务器通信模拟,.NET网络通信客户机服务器,以及 在Linux中实现客户机服务器通信。这些资源提供了丰富的背景知识和实用的编程示例,帮助你更好地理解和实现上述技术。
UNIX环境高级编程下载服务器
(1) 请求访问远程系统
(2) 返回文件描述符
(3) 拨号调制解调器
客户机