请大家帮我推荐一个虚拟主机好吗?要求能运行自己编的通过Socket为客户提供自定义服务的服务器,支持cgi/asp/jsp/php,容量大。主要是能

我不懂电脑 2003-08-13 04:38:02
请大家帮我推荐一个虚拟主机好吗?要求能运行自己编的通过Socket为客户提供自定义服务的服务器,支持cgi/asp/jsp/php,容量大。主要是能运行自己编的通过Socket为客户提供自定义服务的服务器而且提供商比较稳定、可靠。
...全文
40 35 打赏 收藏 举报
写回复
35 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ysyzqm-zqm 2003-11-27
to :Raptor(猛禽)
老大,你原来是我的qq好友了,怎么把我删除了啊?
  • 打赏
  • 举报
回复
ysyzqm-zqm 2003-11-27
呵呵,错了,是不知道可以不可以满足你的需要,我可以 借给你!
  • 打赏
  • 举报
回复
ysyzqm-zqm 2003-11-27
不知道你需要什么样的业务,我这里单位的网络只有2M,不知道可以不可以借给你,如果需要我这里免费
qq:21557555
网址:www.101king.com
  • 打赏
  • 举报
回复
Friecin 2003-11-21
不好找,关键是价格很高!
  • 打赏
  • 举报
回复
我不懂电脑 2003-11-21
感谢 PPower(月亮光光,照地堂)
这么长时间了还回复。
  • 打赏
  • 举报
回复
勉励前行 2003-11-13
這些虛的主機,都不是非常可靠的,那些網管想重新啟動就重新啟動,根本就不用你知情。如果該主機因未知原因被查封了,你的數據是沒保障的。
價格便宜了,穩定性會稍差的,但如果你不介意偶爾停機那麼幾個小時的話就用吧。
  • 打赏
  • 举报
回复
我不懂电脑 2003-10-05
to tix(嗯呐呗) ( )
稳定可靠吗?
  • 打赏
  • 举报
回复
tix 2003-10-03
全国最便宜的网上家园!支持JSP,asp,asp.net,php,cgi

200M 空间 支持ASP,ASP.net ACCESS数据库 只需120/年
200M 空间 支持JSP Mysql或Sybase数据库 只需150/年
200M 空间 支持PHP Mysql数据库 只需150/年

主页:http://www.yffw.com

测试帐号/密码:test
ftp://test@yffw.com

免费7天试用,满意后再付款!

中国电信拖管,稳定服务的保证!

200M 空间 支持ASP,ASP.net ACCESS数据库 只需120/年
空间大小:200M
上传管理:分配一个FTP帐号,流量不限
IIS连接:50个
支持程序:ASP
数据库:Access
脚本并发:30个

200M 空间 支持JSP Mysql或Sybase数据库 只需150/年
空间大小:200M
上传管理:分配一个FTP帐号,流量不限
IIS连接:30个
支持程序:JSP
数据库:Mysql或Sybase
脚本并发:30个

200M 空间 支持php Mysql数据库 只需150/年
空间大小:200M
上传管理:分配一个FTP帐号,流量不限
IIS连接:50个
支持程序:php
数据库:Mysql
脚本并发:30个

主页空间,虚拟主机,邮件服务,域名服务!
可设定支持asp,asp.net,cgi,php,jsp,js,vs,fso,aspupload,jmail,w3upload.Access,Mysql,sql,sybase

诚征代理商,给您最大的利润空间!
  • 打赏
  • 举报
回复
Wnyu 2003-09-21
http://www.java-cn.com/idc/
  • 打赏
  • 举报
回复
Wnyu 2003-09-21
接分
  • 打赏
  • 举报
回复
jingrunx 2003-09-20
做梦吧你
  • 打赏
  • 举报
回复
我不懂电脑 2003-09-15
万网的贵700/年
  • 打赏
  • 举报
回复
猛禽 2003-09-15
万网?偶和万网的接触过,不怎么样。
  • 打赏
  • 举报
回复
jpyc 2003-09-15
万网当为首选
  • 打赏
  • 举报
回复
昌意 2003-09-03
你不要考虑托管了,代价太高了,你想做什么和我连系一下吧
我估计我可以要你成功。
在代价最少的情况下,你加我QQ说吧,54489886
说明情况:虚拟主机
我就加你
  • 打赏
  • 举报
回复
warton 2003-09-03
哦,对了,我那边申请了万网域名和空间的代理!
你可以在www.net.cn上查一下价格!
  • 打赏
  • 举报
回复
warton 2003-09-03
那就用万网的吧,它要是国内的首选
  • 打赏
  • 举报
回复
捧场。。。曾分。。。
  • 打赏
  • 举报
回复
我不懂电脑 2003-09-03
runnerrunning(千寻失业ing&那是我所不能了解的事)
我是想做商用
  • 打赏
  • 举报
回复
猛禽 2003-09-01
虚拟主机看提供的功能定价,一般从几百一年到几千一年的都有
  • 打赏
  • 举报
回复
加载更多回复(15)
相关推荐
虚拟主机系统是针对网络公司销售域名、主机、邮局、数据库等产品时效率低、管理难等问题而自主研发的集产品自动化开通、管理、续费、升级等功一体的软件系统。通过多年的改进与运作,软件已具有功、安全稳定、操作简便等特点。该软件采用C++、VB语言及ASP等脚本语言写。并采用了TCP/IP通讯协议通过后台服务保证其安全稳定运行。让您通过简单的操作即可轻松完成各项业务的开通和管理。让您公司的业绩步步攀升。 详细介绍: 1、主控端同时支持Access/SQL Server数据库。 3、系统支持51种域名的在线查询及注册。 4、支持5家域名实时注册接口,包括:新网、新网互连、中国频道、商务中国、万网。 2、被控端以后台服务方式运行运行更加稳定。主控端和被控端通讯采用TCP/IP方式。通讯更加安全。 5、支持主机ASPASP.Net、PHPCGI、WAP等脚本的自动开设。 6、支持Windows2003操作系统的应用程序池模式,并可以自定义站点共享应用程序池数量。 7、强的主机控制面板功,包括:IP访问限制、关闭/恢复站点执行权限、在线压缩及解压、ASP代码加密、目录密码保护、自定义MIME类型 等。 8、支持纯FTP主机的开设,并支持子FTP帐号的开设及管理。 9、支持IMAIL和WINWEBMAIL企业邮局系统。 10、支持SQL Server数据库和MySQL数据库的实时开设。 11、强服务管理功,您可以在线服务、重启IIS、MAIL、FTP、SQL Server、MySQL服务。 12、在线监控CPU、内存使用率、磁盘空间使用情况等。在线管理进程、服务、NT用户等信息。并可以结束相关的服务和进程。 13、支持9家常用的在线支付接口,包括:网银、快钱、iPay、NPS、云网、AllBuy、易宝、支付宝、财付通。 14、完善的备案自动审核系统,自动检查未备案网站,发送邮件通知,到期未备案的网站将被自动停止。 15、支持会员特殊价格,您可以针对不同的会员设置不同的产品价格。 16、支持发票申,会员可通过前台申发票,管理员可通过后台进行审核等操作。管理员可自定义发票税率及寄送发票所产生的邮寄费用等 。 17、超强的产品赠送模块,所有产品均可以添加无限赠品。赠品可跟随产品一并开通、一并续费,或分别续费。 18、系统全自动安装,无须烦琐的安装过程。并且重做系统后也通过恢复程序自动恢复。 【功介绍】 1、域名注册 ※ 支持51种域名后缀查询,并可自定义域名查询接口。 ※ 支持5家域名实时查询注册接口,如:新网、新网互连、中国频道、商务中国、万网。 ※ 自定义域名注册价格、续费价格、注册年限参数。可以按照不同会员等级定义会员的注册价格和续费价格。 ※ 支持自定义域名产品或已开通域名的续费方式,如:按照购买价格续费或域名实时价格续费。 ※ 先进的域名查询接口机制,默认支持新网、新网互连、中国频道、商务中国、万网查询接口。并可自主添加域名查询接口。 ※ 支持域名实时管理功,如:修改域名联系人、修改DNS服务、域名解析、修改域名密码、域名证书、域名续费等。 ※ 自定义域名注册接口功。您可以设置不同的域名后缀使用不同的注册接口注册,且不影响已开通域名的管理。 2、虚拟主机支持虚拟主机实时开通、管理。 ※ 支持ASPASP.Net、PHPCGI、WAP等脚本的自动开设。 ※ 支持多站点共享应用程序池,并可以每几个站点共享一个应用池。 ※ 强虚拟主机管理功,如:站点状态、FTP帐号状态、日志状态、FTP密码、默认文档、404错误页面、绑定域名、删除文件、自定义脚 本错误消息、IP访问限制、关闭/恢复站点执行权限、在线压缩、在线解压缩、ASP代码加密、目录IP访问限制、取消/恢复目录执行权限、目录 密码保护功自定义MIME类型、独立应用程序池回收等。 ※ 自定义管理产品相关参数,如:虚拟主机扩展功、域名绑定数量、日志、FTP连接数、上传、下载速率、强制广告等。 ※ 可设置虚拟主机是否支持试用以及试用天数。 ※ 虚拟主机升级、续费。 3、FTP主机 ※ 支持FTP主机实时开通、管理。 ※ 自定义管理产品相关参数,如:FTP用户数、FTP连接数、同一IP登陆数、连接超时、任务超时、上传速率、下载速率等。 ※ 支持多FTP用户管理,并每个FTP用户分配独立的目录或权限。 ※ 支持FTP管理功,如:FTP密码修改、FTP状态修改、删除文件、FTP用户管理等。 ※ 可设置FTP主机是否支持试用以及试用天数。 ※ FTP主机升级、续费 4、企业邮局 ※ 支持IMAIL以及WINWEBMAIL企业邮局系统。 ※ 企业邮局自动开通、自主管理功。 ※ 自定义管理产品相关参数,如:用户数、空间
EasyHost虚拟主机系统是针对网络公司销售域名、主机、邮局、数据库等产品时效率低、管理难等问题而自主研发的集产品自动化开通、管理、续费、升级等功一体的软件系统。通过多年的改进与运作,软件已具有功、安全稳定、操作简便等特点。该软件采用C 、VB语言及ASP等脚本语言写。并采用了TCP/IP通讯协议通过后台服务保证其安全稳定运行。让您通过简单的操作即可轻松完成各项业务的开通和管理。让您公司的业绩步步攀升。 详细介绍: 1、主控端同时支持Access/SQL Server数据库。 3、系统支持51种域名的在线查询及注册。 4、支持5家域名实时注册接口,包括:新网、新网互连、中国频道、商务中国、万网。 2、被控端以后台服务方式运行运行更加稳定。主控端和被控端通讯采用TCP/IP方式。通讯更加安全。 5、支持主机ASPASP.Net、PHPCGI、WAP等脚本的自动开设。 6、支持Windows2003操作系统的应用程序池模式,并可以自定义站点共享应用程序池数量。 7、强的主机控制面板功,包括:IP访问限制、关闭/恢复站点执行权限、在线压缩及解压、ASP代码加密、目录密码保护、自定义MIME类型 等。 8、支持纯FTP主机的开设,并支持子FTP帐号的开设及管理。 9、支持IMAIL和WINWEBMAIL企业邮局系统。 10、支持SQL Server数据库和MySQL数据库的实时开设。 11、强服务管理功,您可以在线服务、重启IIS、MAIL、FTP、SQL Server、MySQL服务。 12、在线监控CPU、内存使用率、磁盘空间使用情况等。在线管理进程、服务、NT用户等信息。并可以结束相关的服务和进程。 13、支持9家常用的在线支付接口,包括:网银、快钱、iPay、NPS、云网、AllBuy、易宝、支付宝、财付通。 14、完善的备案自动审核系统,自动检查未备案网站,发送邮件通知,到期未备案的网站将被自动停止。 15、支持会员特殊价格,您可以针对不同的会员设置不同的产品价格。 16、支持发票申,会员可通过前台申发票,管理员可通过后台进行审核等操作。管理员可自定义发票税率及寄送发票所产生的邮寄费用等 。 17、超强的产品赠送模块,所有产品均可以添加无限赠品。赠品可跟随产品一并开通、一并续费,或分别续费。 18、系统全自动安装,无须烦琐的安装过程。并且重做系统后也通过恢复程序自动恢复。 【功介绍】 1、域名注册 ※ 支持51种域名后缀查询,并可自定义域名查询接口。 ※ 支持5家域名实时查询注册接口,如:新网、新网互连、中国频道、商务中国、万网。 ※ 自定义域名注册价格、续费价格、注册年限参数。可以按照不同会员等级定义会员的注册价格和续费价格。 ※ 支持自定义域名产品或已开通域名的续费方式,如:按照购买价格续费或域名实时价格续费。 ※ 先进的域名查询接口机制,默认支持新网、新网互连、中国频道、商务中国、万网查询接口。并可自主添加域名查询接口。 ※ 支持域名实时管理功,如:修改域名联系人、修改DNS服务、域名解析、修改域名密码、域名证书、域名续费等。 ※ 自定义域名注册接口功。您可以设置不同的域名后缀使用不同的注册接口注册,且不影响已开通域名的管理。 2、虚拟主机支持虚拟主机实时开通、管理。 ※ 支持ASPASP.Net、PHPCGI、WAP等脚本的自动开设。 ※ 支持多站点共享应用程序池,并可以每几个站点共享一个应用池。 ※ 强虚拟主机管理功,如:站点状态、FTP帐号状态、日志状态、FTP密码、默认文档、404错误页面、绑定域名、删除文件、自定义脚 本错误消息、IP访问限制、关闭/恢复站点执行权限、在线压缩、在线解压缩、ASP代码加密、目录IP访问限制、取消/恢复目录执行权限、目录 密码保护功自定义MIME类型、独立应用程序池回收等。 ※ 自定义管理产品相关参数,如:虚拟主机扩展功、域名绑定数量、日志、FTP连接数、上传、下载速率、强制广告等。 ※ 可设置虚拟主机是否支持试用以及试用天数。 ※ 虚拟主机升级、续费。 3、FTP主机 ※ 支持FTP主机实时开通、管理。 ※ 自定义管理产品相关参数,如:FTP用户数、FTP连接数、同一IP登陆数、连接超时、任务超时、上传速率、下载速率等。 ※ 支持多FTP用户管理,并每个FTP用户分配独立的目录或权限。 ※ 支持FTP管理功,如:FTP密码修改、FTP状态修改、删除文件、FTP用户管理等。 ※ 可设置FTP主机是否支持试用以及试用天数。 ※ FTP主机升级、续费 4、企业邮局 ※ 支持IMAI
kangle介绍 kangle web服务( 简称:kangle ) 是一款跨平台、功、安全稳定、易操作的高性web服务和反向代理服务软件。 除此:kangle也是一款专虚拟主机研发的web服务。实现虚拟主机独立进程、独立身份运行。用户之间安全隔离,一个用户出问题不影响其他用户。安全支持phpaspasp.net、java、ruby等多种动态开发语言。 功特性 kangle采用基于事件驱动(epoll等)加非阻塞socket及异步IO的方式构架,使其比传统web服务更高;静态网页处理力达到Apache的8-10倍左右。 kangle支持isapi,fastcgi,cgi,ajp,uwsgi,fcgi,hmux,http等多种扩展接口,是一个非常开放的系统,非常方便的做负载均衡功; kangle内置内存/磁盘两级缓存,采用LRU淘汰算法,缓存命中率非常高,有效降低资源占用 可以设置每个虚拟主机独立进程,独立身份运行(虚拟主机商的最爱,安全的实现虚拟主机); 商业版还带有独特的防CC攻击和限制虚拟主机cpu的功,自动监测动态网页的访问频率,一但达到设定的阀值,自动对该网页保护,kangle区分攻击访问和正常访问。一但某个虚拟主机的cpu超过设置,自动对该虚拟主机降低优先级。从而不影响其它虚拟主机。做到隔离攻击。 商业版可配合底层的防火墙如iptables,自动封锁/解封ip.可根据ip的访问频率和每ip连接数。防护攻击效果更。 独有的命令扩展(虚拟化其它web服务,使其它web服务亦具有前述优点,如tomcat,这样就安全的提供java虚拟 主机了) kangle具有扩展队列功。对于突发量的动态网页求会加入到队列中,以使系统稳定的提供服务 kangle的访问控制理念来自linux的iptables防火墙,kangle实现很多最小化的匹配模块和标记模块,通过组合,反转可以实现最复杂的需求;从而实现强的访问求控制(url,ip地址,连接数/网速限制,http头,时间控制,多种http认证,#服务负载,url重定向,url重写,内容过滤等等); 支持远程web方式管理.默认管理端口:3311,初始用户名:admin,密码:kangle; 兼容apache的自定义.htaccess功
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 用TCP/IP进行网际互联第三卷:客户-服务程与应用(Linux/POSIX套接字版) 基本信息 原书名:Internetworking With TCP/IP Vol Ⅲ:Client-Server Programming And Applications Linux/POSIX Sockets V 作者: (美)DOUGLAS E.COMER DAVID L.STEVENS 译者: 赵刚 林瑶 蒋慧 等 丛书名: 国外计算机科学教材系列 出版社:电子工业出版社 ISBN:7505365908 上架时间:2001-4-23 出版日期:2001 年4月 页码:432 版次:1-3 所属分类:计算机 > 操作系统 > Linux 计算机 > 计算机网络 > 网络协议 > TCP/IP 教材 > 计算机教材 > 本科/研究生 > 计算机专业教材 > 计算机专业课程 > 计算机网络 推荐   本书是一部关于计算机网络的经典教科书。它是目前美国多数学里所开设的计算机网络课程的参考书。目前国内外见到的各种有关TCP/IP的书籍,其内容均出自本书。本书的特点是:强调原理、概念准确、深入浅出、内容丰富且新颖。全书共分三卷。第三卷讨论应用软件如何使用TCP/IP,重点研究了客户-服务范例,并考察了分布式程序中的客户服务,举例说明了各种设计,讨论了应用网关和隧道技术。第三卷共31章,各章之后附有很多很的习题。本书可供计算机和通信专业的研究生、高年级本科生作教科书和学习参考书,也可供从事科研和技术开发的人员参考。    内容简介    本书是一部计算机网络经典性教科书。它是目前美国多数学里所开设的计算机网络课程的参考书。目前国内外见到的各种有关TCP/IP的书籍,其内容均出自本书。本书的特点是:强调原理,概念准确,深入浅出,内容丰富且新颖。全书共分三卷。第三卷讨论应用软件如何使用TCP/IP,重点研究了客户服务范例,并考察了分布式程序中的客户服务,举例说明了各种设计,讨论了应用网关和隧道技术。第三卷共31章,各章之后附有很多很的习题。本书可供计算机和通信专业的研究生、高年级本科生作教科书和学习参考书,也可供从事科研和技术开发的人员参考。    作译者 作者: Douglas E.Comer    Douglas E.Comer博士从20世纪70年代开始从事互联网的研究和开发工作,他曾是互联网体系结构委员会的成员,该委员会是确定互联网发展标准的权威机构;他也曾任美国计算机网CSTNET技术委员会的主席,该网络是美国早期互联网建设中最重的网络之一。他现在是美国普渡学计算机科学系的教授,从事计算机网络和操作系统方面的教学和科研工作。    Douglas Comer博士是TCP/IP协议和因特网的国际公认专家。自20世纪70年代末、80年代初形成因特网以来,他就一直致力于因特网的研究工作,他也是负责指导因特网开发的因特网体系小组(IAB)的成员,还是CSNET技术委员会的主席和CSNET执行委员会的成员。 Comer一些公司提供网络设计和实现的咨询,还给全世界的技术和非技术人员开TCP/IP和互联网络的专业讲座。他的操作系统Ximu以及TCP/IP协议的实现在他的书中都有介绍,并且应用到了商业产品中。 译者: 蒋慧 蒋慧,女,1973年2月出生。1995年毕业于南京通信工程学院计算机系,获计算机应用专业工学学土学位。1998年于南京通信工程学院计算机软件专业毕业,并获硕士学位。1998年9月至今,于解放军理工学攻读博士学位。自1995年以来,在国内外重学术刊物和会议上发表8篇论文,其中2篇论文被IEEE国际会议录用。已出版3本有关网络的译作。目前从事软件需求工程、网络协议验证形式化方法以及函数式语言等方面的研究。 目录 封面 -29 封底 -28 书名 -27 版权 -26 出版说明 -25 关于作者 -22 前言 -21 序言 -20 目录 -18 第1章 引言和概述 1 1.1 使用TCP/IP的因特网应用 1 1.2 分布式环境设计应用程序 1 1.3 标准和非标准的应用协议 1 1.4 使用标准应用协议的例子 1 1.5 telnet连接的例子 2 1.6 使用TELNET访问其他服务 3 1.7 应用协议和软件的灵活性 4 1.8 从提供者的角度看服务 4 1.9 本教材的其余部分 5 1.10 小结 5 深入研究 5 习题 5 第2章 客户-服务模型与软件设计 7 2.1 引言 7 2.2 动机 7 2.3 术语和概念 8 2.3.1 客户服务 8 2.3.2 特权和复杂性 8 2.3.3 标准和非标准客户软件 9 2.3.4 客户的参数化 9 2.3.5 无连接的和面向无连接的服务 10 2.3.6 无状态和有状态服务 10 2.3.7 无状态文件服务的例子 11 2.3.8 有状态文件服务的例子 11 2.3.9 标识客户 12 2.3.10 无状态是一个协议问题 13 2.3.11 充当客户服务 13 2.4 小结 14 深入研究 14 习题 15 第3章 客户-服务软件中的并发处理 16 3.1 引言 16 3.2 网络中的并发 16 3.3 服务中的并发 17 3.4 术语和概念 18 3.4.1 进程概念 18 3.4.2 局部和全局变量的共享 19 3.4.3 过程调用 20 3.5 一个创建并发进程的例子 20 3.5.1 一个顺序执行的C实例 20 3.5.2 程序的开发版本 21 3.5.3 时间分片 22 3.5.4 单线程的进程 23 3.5.5 使各进程分离 23 3.6 执行新的代码 24 3.7 上下文切换和协议软件设计 25 3.8 并发和异步I/O 25 3.9 小结 25 深入研究 26 习题 26 第4章 协议的程序接口 27 4.1 引言 27 4.2 不精确指明的协议软件接口 27 4.2.1 优点与缺点 27 4.3 接口功 28 4.4 概念性接口的规约 28 4.5 系统调用 28 4.6 网络通信的两种基本方法 29 4.7 LINIX中提供的基本I/O功 29 4.8 将Linux I/O用于TCP/IP 30 4.9 小结 31 深入研究 31 习题 31 第5章 套接字API 32 5.1 引言 32 5.2 Berkeley套接字 32 5.3 指明一个协议接口 32 5.4 套接字的抽象 33 5.4.1 套接字描述符和文件描述符 33 5.4.2 针对套接字的系统数据结构 34 5.4.3 主动套接字或被动套接字 35 5.5 指明端点地址 35 5.6 类属地址结构 35 5.7 套接字API中的系统调用 36 5.7.1 socket调用 37 5.7.2 connect调用 37 5.7.3 send调用 37 5.7.4 recv调用 37 5.7.5 close调用 38 5.7.6 bind调用 38 5.7.7 listen调用 38 5.5.8 accept调用 38 5.7.9 在套接字中使用read和write 38 5.7.10 套接字调用小结 39 5.8 用于整数转换的实用例程 39 5.9 在程序中使用套接字调用 40 5.10 套接字调用的参数所使用的符号常量 40 5.11 小结 41 深入研究 41 习题 41 第6章 客户软件设计中的算法和问题 43 6.1 引言 43 6.2 不是研究细节而是学习算法 43 6.3 客户体系结构 43 6.4 标识服务的位置 44 6.5 分析地址参数 45 6.6 查找域名 45 6.7 由名字查找某个熟知端口 46 6.8 端口号和网络字节顺序 47 6.9 由名字查找协议 47 6.10 TCP客户算法 48 6.11 分配套接字 48 6.12 选择本地协议端口号 48 6.13 选择本地IP地址中的一个基本问题 49 6.14 将TCP套接字连接到某个服务 49 6.15 使用TCP与服务通信 50 6.16 从TCP连接中读取响应 50 6.17 关闭TCP连接 51 6.17.1 对部分关闭的需 51 6.17.2 部分关闭的操作 51 6.18 UDP客户程 51 6.19 连接的和非连接的UDP套接字 52 6.20 对UDP使用connect 52 6.21 使用UDP与服务通信 52 6.22 关闭使用UDP的套接字 53 6.23 对UDP的部分关闭 53 6.24 关于UDP不可靠性的警告 53 6.25 小结 53 深入研究 54 习题 54 第7章 客户软件举例 55 7.1 引言 55 7.2 小例子的重性 55 7.3 隐藏细节 55 7.4 针对客户程序的过程库例子 56 7.5 connectTCP的实现 56 7.6 connectUDP的实现 57 7.7 构成连接的过程 57 7.8 使用例子库 60 7.9 DAYTIME服务 60 7.10 针对DAYTIME的TCP客户实现 61 7.11 从TCP连接中进行读 62 7.12 TIME服务 63 7.13 访问TIME服务 63 7.14 精确时间和网络时延 63 7.15 针对TIME服务的UDP客户 64 7.16 ECHO服务 65 7.17 针对ECHO服务的TCP客户 66 7.18 针对ECHO服务的UDP客户 67 7.19 小结 69 深入研究 70 习题 70 第8章 服务软件设计的算法和问题 71 8.1 引言 71 8.2 概念性的服务算法 71 8.3 并发服务和循环服务 71 8.4 面向连接的和无连接的访问 72 8.5 传输协议的语义 72 8.5.1 TCP语义 72 8.5.2 UDP语义 73 8.6 选择传输协议 73 8.7 面向连接的服务 73 8.8 无连接的服务 74 8.9 故障、可靠性和无状态 74 8.10 优化无状态服务 75 8.11 四种基本类型的服务 76 8.12 求处理时间 77 8.13 循环服务的算法 77 8.14 一种循环的、面向连接的服务的算法 78 8.15 用INADDR_ANY绑定熟知端口 78 8.16 将套接字置于被动模式 78 8.17 接受连接并使用这些连接 79 8.18 循环的、无连接的服务的算法 79 8.19 在无连接的服务中构造应答 79 8.20 并发服务的算法 80 8.21 主线程和从线程 80 8.22 并发的、无连接的服务的算法 81 8.23 并发的、面向连接服务的算法 81 8.24 服务并发性的实现 82 8.25 把单独的程序作从进程来使用 82 8.26 使用单线程获得表面上的并发性 83 8.27 各服务类型所适用的场合 83 8.28 服务类型小结 84 8.29 重问题——服务死锁 85 8.30 其他的实现方法 85 8.31 小结 85 深入研究 86 习题 86 第9章 循环的、无连接服务(UDP) 87 9.1 引言 87 9.2 创建被动套接字 87 9.3 进程结构 90 9.4 TIME服务举例 91 9.5 小结 92 深入研究 92 习题 93 第10章 循环的、面向连接的服务(TCP) 94 10.1 引言 94 10.2 分配被动的TCP套接字 94 10.3 用于DAYTIME服务服务 95 10.4 进程结构 95 10.5 DAYTIME服务举例 95 10.6 关闭连接 98 10.7 连接终止和服务的脆弱性 98 10.8 小结 98 深入研究 99 习题 99 第11章 并发的、面向连接的服务(TCP) 100 11.1 引言 100 11.2 并发ECHO 100 11.3 循环与并发实现的比较 100 11.4 进程结构 101 11.5 并发ECHO服务举例 101 11.6 清除游离(errant)进程 104 11.7 小结 105 深入研究 105 习题 105 第12章 将线程用于并发(TCP) 106 12.1 引言 106 12.2 Linux线程概述 106 12.3 线程的优点 106 12.4 线程的缺点 107 12.5 描述符、延迟和退出 107 12.6 线程退出 108 12.7 线程协调和同步 108 12.7.1 互斥 108 12.7.2 信号量 108 12.7.3 条件变量 109 12.8 使用线程的服务实例 109 12.9 监控 113 12.10 小结 113 深入研究 113 习题 114 第13章 单线程、并发服务(TCP) 115 13.1 引言 115 13.2 服务中的数据驱动处理 115 13.3 用单线程进行数据驱动处理 116 13.4 单线程服务的线程结构 116 13.5 单线程ECHO服务举例 117 13.6 小结 119 深入研究 119 习题 120 第14章 多协议服务(TCP,UDP) 121 14.1 引言 121 14.2 减少服务数量的动机 121 14.3 多协议服务的设计 121 14.4 进程结构 122 14.5 多协议DAYTIME服务的例子 122 14.6 共享代码的概念 125 14.7 并发多协议服务 125 14.8 小结 126 深入研究 126 习题 126 第15章 多服务服务(TCP,UDP) 127 15.1 引言 127 15.2 合并服务 127 15.3 无连接的、多服务服务的设计 127 15.4 面向连接的、多服务服务的设计 128 15.5 并发的、面向连接的、多服务服务 129 15.6 单线程的、多服务服务的实现 129 15.7 从多服务服务调用单独的程序 130 15.8 多服务、多协议设计 131 15.9 多服务服务的例子 131 15.10 静态的和动态的服务配置 137 15.11 UNIX超级服务,inetd 138 15.12 inetd服务的例子 140 15.13 服务的几种变形清单 141 15.14 小结 141 深入研究 142 习题 142 第16章 服务并发性的统一、高效管理 143 16.1 引言 143 16.2 在循环设计和并发设计间选择 143 16.3 并发等级 143 16.4 需求驱动的并发 144 16.5 并发的代价 144 16.6 额外开销和时延 144 16.7 小时延可出麻烦 145 16.8 从线程/进程预分配 146 16.8.1 Linux中的预分配 146 16.8.2 面向连接服务中的预分配 147 16.8.3 互斥、文件锁定和accept并发调用 147 16.8.4 无连接服务中的预分配 148 16.8.5 预分配、突发通信量和NFS 149 16.8.6 多处理器上的预分配 149 16.9 延迟的从线程/进程分配 149 16.10 两种技术统一的基础 150 16.11 技术的结合 150 16.12 小结 151 深入研究 151 习题 151 第17章 客户进程中的并发 153 17.1 引言 153 17.2 并发的优点 153 17.3 运用控制的动机 153 17.4 与多个服务的并发联系 154 17.5 实现并发客户 154 17.6 单线程实现 155 17.7 使用ECHO的并发客户例子 156 17.8 并发客户的执行 160 17.9 例子代码中的并发性 161 17.10 小结 161 习题 162 第18章 运输层和应用层的隧道技术 163 18.1 引言 163 18.2 多协议环境 163 18.3 混合网络技术 164 18.4 动态电路分配 165 18.5 封装和隧道技术 166 18.6 通过IP互联网的隧道技术 166 18.7 客户服务之间的应用级隧道技术 166 18.8 隧道技术、封装和电话拨号线 167 18.9 小结 168 深入研究 168 习题 168 第19章 应用级网关 169 19.1 引言 169 19.2 在受约束的环境中的客户服务 169 19.2.1 限制访问的现实 169 19.2.2 有限功的计算机 169 19.2.3 安全性引起的连通性约束 169 19.3 使用应用网关 170 19.4 通过邮件网关互操作 171 19.5 邮件网关的实现 171 19.6 应用网关与隧道技术的比较 172 19.7 应用网关和有限因特网连接 173 19.8 解决安全问题而使用的应用网关 174 19.9 应用网关和额外跳问题 174 19.10 应用网关举例 176 19.11 一个应用网关的实现 176 19.12 应用网关的代码 178 19.13 网关交换的例子 179 19.14 使用rfed和.forward或slocal文件 179 19.15 通用的应用网关 180 19.16 SLIRP的运行 180 19.17 SLIRP如何处理连接 181 19.18 IP寻址和SLIRP 181 19.19 小结 182 深入研究 182 习题 183 第20章 外部数据表示(XDR) 184 20.1 引言 184 20.2 数据表示 184 20.3 N平方转换问题 185 20.4 网络标准字节顺序 185 20.5 外部数据表示的事实上的标准 186 20.6 XDR数据类型 186 20.7 隐含类型 187 20.8 使用XDR的软件支持 187 20.9 XDR库例程 188 20.10 一次一片地构造报文 188 20.11 XDR库中的转换例程 189 20.12 XDR流、I/O和TCP 190 20.13 记录、记录边界和数据报I/O 190 20.14 小结 191 深入研究 191 习题 191 第21章 远程过程调用(RPC)的概念 193 21.1 引言 193 21.2 远程过程调用模型 193 21.3 构建分布式程序的两种模式 193 21.4 常规过程调用的概念性模型 194 21.5 过程模型的扩充 194 21.6 常规过程调用的执行和返回 195 21.7 分布式系统中的过程模型 196 21.8 客户-服务和RPC之间的类比 196 21.9 作程序的分布式计算 197 21.10 Sun Microsystems的远程过程调用定义 197 21.11 远程程序和过程 198 21.12 减少参数的数量 198 21.13 标识远程程序和过程 198 21.14 适应远程程序的多个版本 200 21.15 远程程序中的互斥 200 21.16 通信语义 200 21.17 至少一次语义 201 21.18 RPC重传 201 21.19 将远程程序映射到协议端口 201 21.20 动态端口映射 202 21.21 RPC端口映射器算法 202 21.22 ONC RPC的报文格式 203 21.23 对远程过程进行参数排序 205 21.24 鉴别 205 21.25 RPC报文表示的例子 206 21.26 UNIX鉴别字段的例子 206 21.27 小结 207 深入研究 208 习题 208 第22章 分布式程序的生成(rpcgen的概念) 209 22.1 引言 209 22.2 使用远程过程调用 209 22.3 支持RCP的程工具 210 22.4 将程序划分成本地过程和远程过程 211 22.5 RPC增加代码 211 22.6 stub过程 212 22.7 多个远程过程和分派 212 22.8 客户端的stub过程的名字 213 22.9 使用rpcgen生成分布式程序 213 22.10 rpcgen输出和接口过程 214 22.11 rpcgen的输入和输出 215 22.12 使用rpcgen构建客户服务 215 22.13 小结 215 深入研究 216 习题 216 第23章 分布式程序的生成(rpcgen的例子) 218 23.1 引言 218 23.2 说明rpcgen的例子 218 23.3 查找字典 218 23.4 分布式程序的八个步骤 219 23.5 步骤1:构建常规应用程序 220 23.6 步骤2:将程序划分成两部分 224 23.7 步骤3:创建rpcgen规约 229 23.8 步骤4:运行rpcgen 230 23.9 rpcgen产生的.h文件 230 23.10 rpcgen产生的XDR转换文件 232 23.11 rpcgen产生的客户代码 233 23.12 rpcgen产生的服务代码 235 23.13 步骤5:写stub接口过程 238 23.13.1 客户端接口例程 238 23.13.2 服务端接口例程 240 23.14 步骤6:译和链接客户程序 241 23.15 步骤7:译和链接服务程序 244 23.16 步骤8:启动服务和执行客户 246 23.17 使用make实用程序 247 23.18 小结 249 深入研究 249 习题 249 第24章 网络文件系统(NFS)的概念 251 24.1 引言 251 24.2 远程文件存取和传送 251 24.3 对远程文件的操作 252 24.4 异构计算机之间的文件存取 252 24.5 无状态服务 252 24.6 NFS和UNIX的文件语义 252 24.7 UNIX文件系统的回顾 253 24.7.1 基本定义 253 24.7.2 无记录界限的字节序列 253 24.7.3 文件拥有者和组标识符 253 24.7.4 保护和存取 253 24.7.5 打开-读-写-关闭范例 254 24.7.6 数据传送 255 24.7.7 搜索目录权限 255 24.7.8 随机存取 255 24.7.9 搜索超过文件的结束 256 24.7.10 文件位置和并发存取 256 24.7.11 在并发存取时的“写(write)”语义 257 24.7.12 文件名和路径 257 24.7.13 索引节点(inode):存储在文件中的信息 257 24.7.14 stat操作 259 24.7.15 文件命名机制 259 24.7.16 文件系统mount 260 24.7.17 UNIX文件名解析 261 24.7.18 符号链接 262 24.8 NFS下的文件 262 24.9 NFS的文件类型 262 24.10 NFS文件模式 263 24.11 NFS文件属性 263 24.12 NFS客户服务 264 24.13 NFS客户操作 265 24.14 NFS客户与UNIX系统 266 24.15 NFS安装 266 24.16 文件句柄 267 24.17 句柄取代路径名 267 24.18 无状态服务的文件定位 268 24.19 对目录的操作 269 24.20 无状态地读目录 269 24.21 NFS服务中的多个分层结构 269 24.22 安装(mount)协议 270 24.23 NFS的传输协议 270 24.24 小结 270 深入研究 271 习题 271 第25章 网络文件系统协议(NFS,Mount) 272 25.1 引言 272 25.2 用RPC定义协议 272 25.3 用数据结构和过程定义协议 272 25.4 NFS常数、类型和数据声明 273 25.4.1 NFS常数 273 25.4.2 NFS的typedef声明 274 25.4.3 NFS数据结构 274 25.5 NFS过程 277 25.6 NFS操作的语义 277 25.6.1 NFSPROC3_NULL(过程0) 277 25.6.2 NFSPROC3_GETATTR(过程1) 278 25.6.3 NFSPROC3_SETATTR(过程2) 278 25.6.4 NFSPROC3_LOOKUP(过程3) 278 25.6.5 NFSPROC3_ACCESS(过程4) 278 25.6.6 NFSPROC3_READLINK(过程5) 278 25.6.7 NFSPROC3_READ(过程6) 278 25.6.8 NFSPROC3_WRITE(过程7) 278 25.6.9 NFSPROC3_CREATE(过程8) 278 25.6.10 NFSPROC3_MKDIR(过程9) 278 25.6.11 NFSPROC3_SYMLINK(过程10) 279 25.6.12 NFSPROC3_MKNOD(过程11) 279 25.6.13 NFSPROC3_REMOVE(过程12) 279 25.6.14 NFSPROC3_RMDIR(过程13) 279 25.6.15 NFSPROC3_RENAME(过程14) 279 25.6.16 NFSPROC3_LINK(过程15) 279 25.6.17 NFSPROC3_READDIR(过程16) 279 25.6.18 NFSPROC3_READDIRPLUS(过程17) 280 25.6.19 NFSPROC3_FSSTAT(过程18) 280 25.6.20 NFSPROC3_FSINO(过程19) 280 25.6.21 NFSPROC3_PATHCONF(过程20) 280 25.6.22 NFSPROC3_COMMIT(过程21) 280 25.7 安装协议 280 25.7.1 安装协议的常数定义 280 25.7.2 安装协议的类型定义 281 25.7.3 安装数据结构 281 25.8 安装协议中的过程 282 25.9 安装操作的语义 282 25.9.1 MOUNTPROC3_NULL(过程0) 282 25.9.2 MOUNTPROC3_MNT(过程1) 282 25.9.3 MOUNTPROC3_DUMP(过程2) 283 25.9.4 MOUNTPROC3_UMNT(过程3) 283 25.9.5 MOUNTPROC3_UMNTALL(过程4) 283 25.9.6 MOUNTPROC3_EXPORT(过程5) 283 25.10 NFS和安装鉴别 283 25.11 文件加锁 284 25.12 NFS第3版与第4版之间的变化 284 25.13 小结 285 深入研究 285 习题 285 第26章 TELNET客户(程序结构) 287 26.1 引言 287 26.2 概述 287 26.2.1 用户终端 287 26.2.2 命令和控制信息 287 26.2.3 终端、窗口和文件 288 26.2.4 对并发性的需 288 26.2.5 TELNET客户的过程模型 288 26.3 TELNET客户算法 289 26.4 Linux中的终端I/O 289 26.4.1 控制设备驱动器 291 26.5 建立终端模式 291 26.6 用于保存状态的全局变量 292 26.7 在退出之前恢复终端模式 293 26.8 客户挂起与恢复 294 26.9 有限状态机的规约 295 26.10 在TELNET数据流中嵌入命令 296 26.11 选项协商 296 26.12 求/提供的对称性 297 26.13 TELNET字符定义 297 26.14 针对来自服务数据的有限状态机 298 26.15 在各种状态之间转移 299 26.16 有限状态机的实现 300 26.17 压缩的有限状态机表示 300 26.18 在运行时维持压缩表示 302 26.19 压缩表示的实现 302 26.20 构造有限状态机转移矩阵 304 26.21 套接字输出有限状态机 305 26.22 套接字输出有限状态机的相关定义 306 26.23 选项子协商有限状态机 307 26.24 选项子协商有限状态机的相关定义 308 26.25 有限状态机初始化 309 26.26 TELNET客户的参数 310 26.27 TELNET客户的核心 311 26.28 主有限状态机的实现 314 26.29 小结 315 深入研究 315 习题 316 第27章 TELNET客户(实现细节) 317 27.1 引言 317 27.2 有限状态机动作过程 317 27.3 记录选项求的类型 317 27.4 完成空操作 318 27.5 对回显选项的WILL/WONT做出响应 318 27.6 对未被支持的选项的WILL/WONT做出响应 320 27.7 对no go-ahead选项的WILL/WONT做出响应 320 27.8 生成用于二进制传输的DO/DONT 321 27.9 对未被支持的选项的DO/DONT做出响应 322 27.10 对传输二进制选项的DO/DONT做出响应 323 27.11 对终端类型选项的DO/DONT做出响应 324 27.12 选项子协商 326 27.13 发送终端类型信息 326 27.14 终止子协商 328 27.15 向服务发送字符 328 27.16 显示在用户终端上出现的传入数据 329 27.17 使用termcap控制用户终端 332 27.18 将数据块写到服务 333 27.19 与客户进程交互 334 27.20 对非法命令做出响应 335 27.21 脚本描述文件 335 27.22 脚本描述的实现 336 27.23 初始化脚本描述 336 27.24 收集脚本文件名的字符 337 27.25 打开脚本文件 338 27.26 终止脚本描述 339 27.27 打印状态信息 340 27.28 小结 341 深入研究 341 习题 342 第28章 流式音频和视频传输(RTP概念和设计) 343 28.1 引言 343 28.2 流式传输服务 343 28.3 实时交付 343 28.4 抖动的协议补偿 343 28.5 重传、丢失和恢复 344 28.6 实时传输协议 344 28.7 流的转换和混合 345 28.8 迟延回放和抖动缓存 346 28.9 RTP控制协议(RTCP) 346 28.10 多种流同步 347 28.11 RTP传输和多对多传输 348 28.12 会话、流、协议端口和分用 349 28.13 码的基本方法 350 28.14 RTP软件的概念性组织 350 28.15 进程/线程结构 351 28.16 API的语义 352 28.17 抖动缓存的设计和重新缓存 253 28.18 事件处理 354 28.19 回放异常及时间戳的复杂性 354 28.20 实时库例子的小 354 28.21 MP3播放器的例子 355 28.22 小结 355 深入研究 356 习题 356 第29章 流式音频和视频传输(RTP实现示例) 357 29.1 引言 357 29.2 集成实现 357 29.3 程序结构 357 29.4 RTP定义 358 29.5 时间值的处理 361 29.6 RTP序列空间的处理 362 29.7 RTP分组队列的处理 363 29.8 RTP输入处理 365 29.9 RTCP保存统计信息 367 29.10 RTP初始化 368 29.11 RTCP的定义 372 29.12 接收RTCP发送方的报告 373 29.13 产生RTCP接收方的报告 374 29.14 创建RTCP的首部 376 29.15 RTCP时延的计算 376 29.16 RTCP Bye(再见)报文的产生 377 29.17 集成实现的小 378 29.18 小结 378 深入研究 378 习题 379 第30章 Linux服务中的实用技巧和技术 380 30.1 引言 380 30.2 后台操作 380 30.3 写在后台运行服务 381 30.4 打开描述符和继承 382 30.5 对服务程以关闭所继承的描述符 382 30.6 来自控制TTY的信号 382 30.7 对服务程以改变它的控制TTY 382 30.8 转移到一个安全的和已知的目录 383 30.9 对服务程以改变目录 383 30.10 Linux umask 383 30.11 对服务程以设置其umask 384 30.12 进程组 384 30.13 对服务程以设置其进程组 384 30.14 标准I/O描述符 384 30.15 对服务程以打开标准描述符 385 30.16 服务互斥 385 30.17 对服务程以避免多个副本 385 30.18 记录服务的进程ID 386 30.19 对服务程以记录其进程ID 386 30.20 等待一个子进程退出 386 30.21 对服务程以等待每个子进程退出 387 30.22 外来信号 387 30.23 对服务程以忽略外来信号 387 30.24 使用系统日志设施 387 30.24.1 产生日志报文 387 30.24.2 间接方式和标准差错的优点 388 30.24.3 I/O重定向的限制 388 30.24.4 客户-服务的解决方案 388 30.24.5 syslog机制 389 30.24.6 syslog的报文类 389 30.24.7 syslog的设施 389 30.24.8 syslog的优先级 389 30.24.9 使用syslog 390 30.24.10 syslog配置文件举例 390 30.25 小结 391 深入研究 392 习题 392 第31章 客户-服务系统中的死锁和资源缺乏 393 31.1 引言 393 31.2 死锁的定义 393 31.3 死锁检测的难度 393 31.4 避免死锁 394 31.5 客户服务间的死锁 394 31.6 在单个交互中避免死锁 395 31.7 一组客户一个服务之间的资源缺乏 395 31.8 忙连接和资源缺乏 395 31.9 避免阻塞的操作 396 31.10 进程、连接和其他限制 396 31.11 客户服务的循环 397 31.12 用文档确认依赖性 397 31.13 小结 398 习题 398 附录1 系统调用与套接字使用的库例程 400 附录2 Linux文件和套接字描述符的操作 422 参考文献 425 附录页 前言    Douglas E.Comer博士的系列著作——《用TCP/IP进行网际互联》是一套令人瞩目的丛书。向开放源码(open source)读者介绍该书的第三卷,对我来说实在是荣幸之至。    开放源码和TCP/IP的历史是紧密相连的没有网络把你和合作者连接起来,就不进行协作!而且,最早一批开放源码软件就有TCP/IP协议的实现。我记得在20世纪80年代初,“开放源码”还不像现在那样受媒体青睐,理解网络体系结构和实现的研究者屈指可数,而Douglas就是其中的佼佼者——他是一项广泛研究计划的负责人,全线出击,对当时遇到的很多问题提出挑战。    记得在20世纪90年代初,我们已经看到将技术应用到工程领域的巨趋势,这些领域渴望着知识和解决方案。那时,公司构造基于互联网的环境,对工程师来说还是一个的挑战。于是,Douglas便开始教导他们,让他们够掌握下层网络的复杂性,给他们提供辛勤耕耘得来的经验教训。    21世纪来临了,新一代的设计者正在因特网写分布式应用程序。当前,我们听到许多激动人心的因特网应用,如 napster、gnutella以及infrasearcch。但奇怪的是,现在的开发人员很少有人牢固掌握网络工程原理——坦率地说,他们缺乏对基础的理解,这种缺乏不可避免地造成了应用程序的适应力不强或者干脆就不工作。 ’    正因如此,Doug与David L.Stevens合著的第三卷:客户服务程与应用才与今天的因特网息息相关。这本书教给我们如何设计和构建客户服务应用程序,而且更重的是,它还教给我们如何理解每种设计决策中所蕴涵的利弊得失。    我希望读者够像业界前辈一样,从Comer博士的智慧中获益。    Marshall T.Rose    Theorist,Implementor, and Agent Provocateur    Petaluma. California    序言    Linux操作系统声名正旺,作服务系统,它对联网界尤其重。这本使用Linux的新版第三卷是那些渴望了解如何创建联网应用的程序员撰写的。致说来,本书考察这样的问题,“应用软件如何使用TCP/IP协议通过因特网进行通信?”。本书重点研究了客户服务范例,并考察了在分布式程序中客户服务这两部分所用的算法。本卷举例说明了每种设计,并讨论了包括应用层网关和隧道等技术。另外,本卷还重温了几个标准应用协议,并用它们来说明一些算法和实现技术。    尽管本卷可以单独阅读和使用,但它实际是和另外两卷共同构成了一套丛书。丛书第一卷考虑的问题是:“什么是TCP/IP互联网?”;第二卷考察的问题是:“TCP/IP软件是如何工作的?”,它给出了更多的细节,考察了工作代码,比第一卷探讨得更深入。因此,虽然程序员可以只通过第三卷学习创建网络应用,但学习其他各卷可以更地理解下层技术。    第三卷的这个新版本包含了最新的技术,如,有一章解释了Linux程序如何利用POSIX线程设施创建并发服务;关于NFS的章节讨论了NFS的第三版,这一版将Linux界采用。此外,还有部分章节解释了slirp等程序所蕴涵的概念,这种程序通过拨号电话连接访问因特网,而不每台计算机有一个惟一的IP地址。    还有两章显得特别及时,它们集中讨论了流式概念以及相关的技术,这些技术用于通过因特网发送音频和视频数据。第28章描述了实时协议(RTP)、码、抖动缓存等基本概念。第29章展示了用于接收和播放MP3音频的RTP实现。    本书代码可在线获得。通过万维网得到一个副本,可在以下网址的联网书籍清单中查找第三卷:    http://www.cs.purdue.edu/homes/comer/netbooks.html    通过FTP访问代码,使用以下网址:    ftp://ftp.cs.purdue.edu/pub/comer/TCPIP—vol3.1inux.dist.tar.Z    本书前几章介绍了客户服务模型,以及应用程序用于访问TCP/IP协议软件的套接字(socket)接口。此外,还描述了并发进程和用于创建进程的操作系统函数。随后的几章介绍了客户服务设计。    本书阐明了各式各样可的设计并不是没有规则的。实际上,这些设计都遵循了一种模式。在考虑了并行性和传输的选择后,就可以理解这一观点。例如,有一章讨论了使用面向连接传输(如TCP)的非并发服务设计,而另一章讨论了相似的设计,但它使用无连接传输(如UDP)。    我们描述了每个设计如何适应于各种可的实现,但是,并没有试图开发一种客户服务交互的抽象“理论”。我们只是强调实用的设计原则,以及对程序员很重的技术。每种技术在某些情况下都有其优点,并且每种技术都已用于正在工作的软件中。我们相信,理解这些设计之间的概念联系,将有助于读者理解每种方法的优缺点,并更容易在它们之间进行选择。    本书包含了多个例子程序,他们展现了各种设计实际上是如何进行的。多数例子实现了标准的TCP/IP应用协议。在每一种情况下,我们都试图选择一个应用协议,使它可表达一种设计思路而又不太难理解。因此,虽然很少有令人激动的例子程序,但这里的每一个例子都说明了一个的概念。在第三卷的这个版本中,所有的例子程序都使用Linux套接字机制(即套接字API);本书还有两个其他版本,他们含有相同的例子,只不过使用了微软的windows Sockets和AT&T的TLI接口。    后几章集中讨论中间件,讨论了远程过程调用的概念,并描述它是怎样被用于构造分布式程序的。这些章将远程过程调用技术与客户服务模型相联系,并说明如何使用软件从远程过程调用描述生成出客户服务程序。有关TELNET的章节展现了细枝末节如何在一个实际工作的程序中占据支配地位,以及即使是实现一个简单的、面向字符的协议,其代码如何会变得复杂。本部分最后两章是关于流式传输协议的。    本书很部分的重点在并发处理。写过并发程序的学生可熟悉我们所描述的许多概念,因这些概念适用于所有的并发程序,而不仅仅是网络应用。没写过并发程序的学生可会觉得这些概念很难。    本书适于作向高年级学生教授“套接字程”,或向低年级研究生介绍分布式计算的一个学期的课程。由于本书重点是如何使用互联网,而不是互联网是如何工作的,因此学生几乎不需太多的网络背景知识就理解这些内容。只教师按合适的进度循序渐进,本科生课程中不会有特别的概念令人感到太难。介绍操作系统概念或并发程实际经验的基础课程,可提供最佳背景材料。    学生只有亲手使用教材后,才会欣赏它。因此,任何课程都应安排程实践,强迫学生将其想法运用到实际程序中。学本科生可通过反复设计其他的应用协议来学习基本概念。研究生则应构建更复杂的分布式程序,这些程序强调一些细微的技术(如第16章中的并发管理技术和第18章和第19章中的互连技术)。    在此感谢许多人的助。Purdue学因特网研究小组的成员们给本书原稿提供了许多技术信息和建议。Michael Evangelista校对了本书并写了RTP代码。Gustavo Rodriguez—Rivera阅读了本书的许多章节,并做了很多实验测试细节,还辑了附录1。Dennis Brylow对本书许多章节提出了建议。Christine Comer进行了修订并改进了行文和一致性。    Douglas E.Comer    David L. Stevens
CruiseYoung提供的带有详细书签的电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料《TCP/IP网络互联技术(卷3):客户-服务程与应用(Windows套接字版)》的源代码见: http://download.csdn.net/detail/fksec/4639930 TCP/IP网络互联技术(卷3):客户-服务程与应用(Windows套接字版) 基本信息 原书名: Internetworking with TCP/IP Vol III:Client-Server Programming and Applications Windows Sockets Version 原出版社: Prentice Hall/Pearson 作者: (美)Douglas E.Comer,David L.Stevens 译者: 张卫 王 丛书名: 国外经典教材·计算机科学与技术 出版社:清华学出版社 ISBN:7302093792 上架时间:2004-11-10 出版日期:2004 年9月 开本:185×260 页码:446 版次:1-1 内容简介    本书介绍了在Windows操作系统平台上如何使用Windows套接字应用程序接口(Windows Socket APl)写TCP/IP通信程序。重点放在客户服务机制上,介绍了客户-服务机制和应用程序用于网络通信的套接字接口,分析了分布式程序的客户端和服务两部分的算法,讨论了客户端和服务的设计及遵循的模式。本书在并发处理上也花费了相当的篇幅,描述了并发线程以及相关的创建线程的操作系统函数。本书给出了说明每个设计思想的实现方法,讨论了包括应用层网关和管道在内的各种技术,回顾了几个标准应用协议,并使用它们说明一些算法和实现技术。本书包含的一些例子程序显示了每个设计实际上如何操作,多数的例子实现了标准因特网应用协议。    本书适合于学高年级学生或研究生的网络程入门课程,也可作程序员的参考书。    作译者 作者:Douglas E.Comer    Douglas Comer博博士是Purdue Univ的教授,讲授操作系统和计算机网络的课程,早在20世纪70午代后期。他就参与了TCP/IP和互联网的研究,并成世界公认的权威,由他设计实现了X25NET和CYpress网络.以及Xinu操作系统。David Stevens是普渡学计算中心的程序员。TCP/IP的世界经典教材就是他们所著,他们的著作已誉满全球,我国多家出版社也引进了其多部著作的版权。他们的TCP/IP网络互联技术卷1、卷2、卷3在我国都有影印版本。    Douglas E.Comer博士从20世纪70年代开始从事互联网的研究和开发工作,他曾是互联网体系结构委员会的成员,该委员会是确定互联网发展标准的权威机构;他也曾任美国计算机网CSTNET技术委员会的主席,该网络是美国早期互联网建设中最重的网络之一。他现在是美国普渡学计算机科学系的教授,从事计算机网络和操作系统方面的教学和科研工作。 目录 封面 -26 扉页 -25 版权 -24 国外经典教材.计算机科学与技术 审委员会 -23 出版说明 -22 译者的话 -21 序一 -20 序二 -19 目录 -17 第1章 概述 1 1.1 TCP/IP的应用 1 1.2 分布式环境下应用程序的设计 1 1.3 标准和非标准的应用协议 2 1.4 使用标准应用协议的例子 2 1.5 telnet连接的例子 3 1.6 用TELNET访问其他服务 3 1.7 应用协议和软件的灵活性 4 1.8 从提供者的角度看服务 5 1.9 本书的其余部分 6 1.10 小结 6 进一步的研究 6 习题 6 第2章 客户.服务模型和软件的设计 8 2.1 简介 8 2.2 动机 8 2.3 术语和概念 9 2.3.1 客户端和服务 9 2.3.2 特权和复杂性 9 2.3.3 标准和非标准的客户端软件 10 2.3.4 客户端的参数化 10 2.3.5 无连接的与面向连接的服务 11 2.3.6 无状态与有状态的服务 12 2.3.7 有状态的文件服务例子 12 2.3.8 无状态是一个协议问题 14 2.3.9 充当客户端的服务 15 2.4 小结 15 进一步的研究 16 习题 16 第3章 客户.服务软件的并发处理 17 3.1 引言 17 3.2 网络中的并发 17 3.3 服务中的并发 18 3.4 术语和概念 19 3.4.1 进程的概念 19 3.4.2 线程 20 3.4.3 程序和线程 21 3.4.4 过程调用 21 3.5 一个创建并发线程的例子 22 3.5.1 一个顺序执行的C的示例 22 3.5.2 程序的并发版本 23 3.5.3 时间片 25 3.6 分离的线程 26 3.7 上下文切换和协议软件设计 27 3.8 并发和异步I/O 27 3.9 UNIX下的并发 28 3.10 执行一个单独译的程序 29 3.11 小结 30 进一步的研究 30 习题 30 第4章 协议的程序接口 32 4.1 引言 32 4.2 宽松定义的协议软件接口 32 4.3 接口功 33 4.4 概念性接口的规范 33 4.5 API的实现 34 4.6 网络通信的两种基本方法 36 4.7 ANSI C中提供的基本I/O函数 36 4.8 UNIX套接字API的历史 37 4.9 小结 38 进一步的研究 38 习题 38 第5章 套接字API 40 5.1 简介 40 5.2 套接字的历史 40 5.3 一个协议接口的制订 41 5.4 套接字的抽象 41 5.4.1 套接字描述符 41 5.4.2 套接字的系统数据结构 42 5.4.3 使用套接字 43 5.5 指定端点地址 43 5.6 通用地址结构 44 5.7 套接字API中的函数 45 5.7.1 WSAStartup函数 46 5.7.2 WSACleanup函数 46 5.7.3 Socket函数 46 5.7.4 connect函数 46 5.7.5 send函数 46 5.7.6 recv函数 47 5.7.7 closesocket函数 47 5.7.8 bind函数 47 5.7.9 listen函数 48 5.7.10 accept调用 48 5.7.11 TCP套接字调用小结 48 5.8 用于整数转换的实用例程 49 5.9 程序中使用套接字调用 49 5.10 用作套接字调用参数的符号常量 50 5.11 小结 51 进一步的研究 51 习题 51 第6章 客户软件设计中的算法和问题 53 6.1 引言 53 6.2 学习算法而不研究细节 53 6.3 客户体系结构 54 6.4 标识服务的地址 54 6.5 分析地址参数 55 6.6 查找域名 56 6.7 由名字查找熟知端口 57 6.8 端口号和网络字节顺序 58 6.9 由名字查找协议 58 6.10 TCP客户算法 59 6.11 分配套接字 59 6.12 选择本地协议端口号 60 6.13 选择本地IP地址的一个基本问题 60 6.14 将TCP套接字连接到服务 61 6.15 使用TCP和服务通信 61 6.16 从TCP连接上读取响应 62 6.17 关闭TCP连接 63 6.17.1 需部分关闭 63 6.17.2 部分关闭的操作 63 6.18 UDP客户端的程 64 6.19 面向连接的和无连接的UDP套接字 64 6.20 对UDP使用connect 65 6.21 使用UDP和服务通信 65 6.22 关闭使用UDP的套接字 65 6.23 对UDP的部分关闭 65 6.24 关于UDP不可靠性的警告 66 6.25 小结 66 进一步的研究 67 习题 67 第7章 客户软件举例 68 7.1 引言 68 7.2 小例子的重性 68 7.3 隐藏细节 68 7.4 客户程序的过程库例子 69 7.5 ConTCP的实现 70 7.6 ConUPD的实现 70 7.7 用来建立连接的过程 71 7.8 使用例子库 74 7.9 DAYTIME服务 74 7.10 DAYTIME的TCP客户实现 75 7.11 从TCP连接上读取数据 76 7.12 TIME服务 77 7.13 访问TIME服务 77 7.14 精确的时间和网络时延 78 7.15 TIME服务的UDP客户 78 7.16 ECHO服务 80 7.17 ECH0服务的TCP客户 81 7.18 ECHO服务的UDP客户 83 7.19 小结 85 进一步的研究 85 习题 86 第8章 服务软件设计的算法和问题 87 8.1 引言 87 8.2 概念性的服务算法 87 8.3 并发服务和循环服务 87 8.4 面向连接的访问和无连接的访问 88 8.5 面向连接的服务 88 8.6 无连接的服务 89 8.7 故障、可靠性和无状态 90 8.8 优化无状态服务 90 8.9 四种基本类型的服务 92 8.10 求处理时间 93 8.11 循环服务的算法 94 8.12 循环的、面向连接的服务算法 94 8.13 用INADDR_ANY绑定熟知地址 94 8.14 将套接字设置被动模式 95 8.15 接受连接并使用这些连接 95 8.16 循环的、无连接的服务算法 95 8.17 在无连接的服务上构造响应地址 96 8.18 并发服务的算法 97 8.19 主线程和子线程 97 8.20 并发的、无连接的服务的算法 98 8.21 并发的、面向连接的服务算法 98 8.22 用分离的程序作子进程 99 8.23 使用单个线程实现表面上的并发性 99 8.24 各服务类型的使用场合 100 8.25 服务类型小结 101 8.25.1 循环的、无连接的服务 101 8.25.2 循环的、面向连接的服务 101 8.25.3 并发的、无连接的服务 101 8.25.4 并发的、面向连接的服务 101 8.26 重服务死锁的问题 102 8.27 其他的实现方法 103 8.28 小结 103 进一步的研究 103 习题 104 第9章 循环无连接服务(UDP) 105 9.1 引言 105 9.2 创建被动套接字 105 9.3 线程结构 108 9.4 TIME服务举例 109 9.5 小结 111 进一步的研究 111 习题 111 第10章 循环的、面向连接的服务(TCP) 112 10.1 引言 112 10.2 分配被动的TCP套接字 112 10.3 实现DAYTIME服务服务 113 10.4 线程结构 113 10.5 DAYTIME服务举例 114 10.6 关闭连接 116 10.7 连接终止和服务的脆弱性 117 10.8 小结 117 进一步的研究 118 习题 118 第11章 并发的、面向连接的服务(TCP) 119 11.1 引言 119 11.2 并发ECH0 119 11.3 循环的实现和并发的实现的比较 120 11.4 线程结构 120 11.5 并发的ECH0服务举例 121 11.6 小结 124 进一步的研究 124 习题 124 第12章 单线程、并发服务(TCP) 125 12.1 引言 125 12.2 服务中的数据驱动处理 125 12.3 单线程的数据驱动处理 126 12.4 单线程服务的线程结构 126 12.5 单线程ECH0服务举例 127 12.6 小结 130 进一步的研究 130 习题 130 第13章 多协议服务(TCP,UDP) 132 13.1 引言 132 13.2 减少服务数量的动机 132 13.3 多协议服务的设计 133 13.4 线程结构 133 13.5 多协议DAYTIME服务举例 134 13.6 共享代码的概念 137 13.7 并发的多协议服务 137 13.8 小结 138 进一步的研究 138 习题 138 第14章 多服务服务(TCP,UDP) 139 14.1 引言 139 14.2 服务程序的合并 139 14.3 无连接的、多服务服务的设计 140 14.4 面向连接的、多服务服务的设计 140 14.5 并发的、面向连接的、多服务服务 141 14.6 单线程多服务服务的实现 142 14.7 多服务服务对其他单独程序的调用 143 14.8 多服务、多协议设计 144 14.9 一个服务服务的例子 144 14.10 静态的和动态的服务配置 150 14.11 一个超级服务的例子,Inetd 151 14.12 小结 153 进一步的研究 153 习题 153 第15章 服务并发性的统一高效管理 155 15.1 引言 155 15.2 在循环设计和并发设计之间做出选择 155 15.3 并发等级 156 15.4 需求驱动的并发 156 15.5 并发的代价 157 15.6 额外开销和时延 157 15.7 小时延会出问题 157 15.8 线程预分配 159 15.8.1 预分配技术 159 15.8.2 面向连接的服务的预分配 160 15.8.3 无连接服务的预分配 161 15.8.4 预分配、突发通信量和NFS 161 15.8.5 多处理器上的预分配 162 15.9 延迟的线程分配 162 15.10 两种技术统一的基础 163 15.11 两种技术的结合 164 15.12 小结 164 进一步的研究 165 习题 165 第16章 客户端的并发 166 16.1 引言 166 16.2 并发的优点 166 16.3 运行控制的动机 167 16.4 与多个服务的并发联系 167 16.5 实现并发的客户端 168 16.6 单线程实现 169 16.7 使用ECHO的并发客户端例子 170 16.8 并发客户端的执行 175 16.9 计时器的管理 176 16.10 输出举例 176 16.11 例子代码中的并发性 177 16.12 小结 177 习题 177 第17章 传输层和应用层的隧道技术 179 17.1 引言 179 17.2 多协议环境 179 17.3 混合各种网络技术 180 17.4 动态电路分配 181 17.5 封装和隧道技术 182 17.6 通过IP瓦联网的隧道技术 183 17.7 客户端和服务之间的应用层隧道技术 183 17.8 隧道技术、封装以及拨号电话线 184 17.9 小结 185 进一步的研究 185 习题 186 第18章 应用层网关 187 18.1 引言 187 18.2 受限环境中的客户端与服务 187 18.2.1 多重技术的现实 187 18.2.2 功有限的计算机 188 18.2.3 安全性引发的连通性约束 188 18.3 使用应用网关 188 18.4 通过邮件网关的交互 189 18.5 邮件网关的实现 190 18.6 应用网关和隧道技术的比较 190 18.7 应用网关和功受限的系统 192 18.8 了安全性使用的应用网关 193 18.9 应用网关和额外跳问题 194 18.10 一个应用网关的例子 195 18.11 基于Web的应用网关的细节 196 18.12 调用CGI程序 197 18.13 RFC应用网关的URL 198 18.14 通用的应用网关 198 18.15 SLIRP的运行 199 18.16 SLIRP如何处理连接 199 18.17 IP寻址与SLlRP 200 18.18 小结 201 进一步的研究 201 习题 202 第19章 外部数据表示(XDR) 203 19.1 引言 203 19.2 计算机中数据的表示 203 19.3 N平方转换问题 204 19.4 网络标准字节序 205 19.5 外部数据表示事实上的标准 206 19.6 XDR数据类型 206 19.7 隐含类型 207 19.8 使用XDR的软件支持 207 19.9 XDR库例行程序 207 19.10 一次一部分地构建报文 208 19.11 XDR库的转换例行程序 209 19.12 XDR流、I/0和TCP 210 19.13 记录、记录边界和数据报I/O 211 19.14 小结 211 进一步的研究 212 习题 212 第20章 远程过程调用(RPC)的概念 213 20.1 引言 213 20.2 远程过程调用模型 213 20.3 构建分布式程序的两种模式 213 20.4 常规过程调用的概念模型 214 20.5 过程模型的扩充 215 20.6 常规过程调用的执行和返回 215 20.7 分布式系统中的过程模型 216 20.8 客户服务和RPC的相似性 217 20.9 作程序的分布式计算 218 20.10 Sun Microsystems的远程过程调用定义 218 20.11 远程程序和过程 219 20.12 减少参数的数量 219 20.13 标记远程程序和过程 220 20.14 适应远程程序的多个版本 221 20.15 远程程序中的过程互斥 222 20.16 通信语义 222 20.17 至少一次语义 222 20.18 RPC重传 223 20.19 把远程程序映射到协议端口 224 20.20 动态端口映射 224 20.21 RPC端口映射器算法 225 20.22 RPC消息格式 226 20.23 远程过程排列参数 227 20.24 身份认证 228 20.25 RPC消息表示的例子 229 20.26 认证字段的例子 229 20.27 小结 230 进一步的研究 231 习题 231 第21章 分布式程序的生成(Rpcgen概念) 232 21.1 引言 232 21.2 用使用远程过程调用 232 21.3 支持RPC的程机制 233 21.4 将程序分割成本地过程和远程过程 234 21.5 RPC增加代码 235 21.6 桩(stub)过程 235 21.7 多个远程过程和分发 236 21.8 客户端的桩过程名称 236 21.9 使用Rpcgen生成分布式程序 237 21.10 Rpcgen输出和接口过程 238 21.11 Rpcgen的输入和输出 239 21.12 使用Rpcgen构建客户端和服务 239 21.13 小结 240 进一步的研究 240 习题 241 第22章 分布式程序的生成(Rpcgen的例子) 242 22.1 引言 242 22.2 举例说明Rpcgen 242 22.3 查询字典 242 22.4 建立分布式程序的八个步骤 243 22.5 步骤1:建立常规应用程序 244 22.6 步骤2:将程序分割成两部分 248 22.7 步骤3:创建Rpcgen规范 254 22.8 步骤4:运行Rpcgen 255 22.9 Rpcgen生成的.h文件 256 22.10 Rpcgen生成的XDR转换文件 257 22.11 Rpcgen生成的客户端代码 258 22.12 Rpcgen生成的服务代码 260 22.13 步骤5:写桩接口过程 263 22.13.1 客户端接口例程 263 22.13.2 客户端接口例程 265 22.14 步骤6:译链接客户端程序 267 22.15 步骤7:译链接服务程序 270 22.16 步骤8:启动服务运行客户端 272 22.17 小结 272 进一步的研究 273 习题 273 第23章 网络文件系统(NFS)的概念 274 23.1 引言 274 23.2 远程文件访问与文件传输 274 23.3 对远程文件的操作 275 23.4 异构计算机之间的文件访问 275 23.5 无状态的服务 275 23.6 NFS和UNIX文件语义 276 23.7 UNIX文件系统概述 276 23.7.1 基本定义 276 23.7.2 无记录边界的字节序列 276 23.7.3 文件的拥有者和组标识符 277 23.7.4 保护和访问 277 23.7.5 UNIX中的打开一读一写一关闭范例 278 23.7.6 UNIX中的数据传输 278 23.7.7 搜索目录的权限 279 23.7.8 UNIX中的随机访问 279 23.7.9 搜索超过UNIX文件结尾 280 23.7.10 UNIX文件位置和并发访问 280 23.7.11 并发访问时的写操作的语义 281 23.7.12 UNIX中的文件名和路径 281 23.7.13 UNIX索引节点:存储在文件中的信息 282 23.7.14 UNIX中的Stat操作 283 23.7.15 UNIX的文件命名机制 284 23.7.16 装配UNIX文件系统 284 23.7.17 UNIX文件名解析 286 23.7.18 UNIX符号链接 286 23.8 NFS下的文件 287 23.9 NFS文件类型 287 23.10 NFS文件模式 288 23.11 NFS文件属性 289 23.12 NFS的客户端和服务 289 23.13 NFS客户端的操作 291 23.14 NFS的客户端和UNIX 291 23.15 NFS的装配(Mounts) 292 23.16 文件句柄 293 23.17 NFS句柄取代路径名 293 23.18 Windows下的NFS客户端 294 23.19 无状态服务的文件定位 295 23.20 对目录的操作 295 23.21 无状态地读目录 296 23.22 NFS服务中的多个分层结构 296 23.23 装配协议 297 23.24 小结 297 进一步的研究 298 习题 298 第24章 网络文件系统协议(NFS,Mount) 300 24.1 引言 300 24.2 用RPC定义协议 300 24.3 用数据结构和过程定义协议 301 24.4 NFS的常量、类型和数据声明 301 24.4.1 NFS的常量 301 24.4.2 NFS的Typedef声明 302 24.4.3 NFS的数据结构 303 24.5 NFS的过程 305 24.6 NFS中的操作的语义 306 24.6.1 NFSPROC_NULL(过程0) 306 24.6.2 NFSPROC_GETATTR(过程1) 306 24.6.3 NFSPROC_SETATTR(过程2) 306 24.6.4 NFSPROC_ROOT(过程3)[在NFS3中已经不用了] 306 24.6.5 NFSPROC_LOOKUP(过程4) 306 24.6.6 NFSPROC_READLINK(过程5) 307 24.6.7 NFSPROC_READ(过程6) 307 24.6.8 NFSPROC_WRITECACHE(过程7)[在NFS3中已经不用了] 307 24.6.9 NFSPROC_WRITE(过程8) 307 24.6.10 NFSPROC_CREATE(过程9) 307 24.6.11 NFSPROC_REMOVE(过程10) 307 24.6.12 NFSPROC_RENAME(过程11) 308 24.6.13 NFSPROC_LINK(过程12) 308 24.6.14 NFSPROC_SYMLINK(过程13) 308 24.6.15 NFSPROC_MKDIR(过程14) 308 24.6.16 NFSPROC_RMDIR(过程15) 308 24.6.17 NFSPROC_READDIR(过程16) 308 24.6.18 NFSPROC_STATFS(过程17) 309 24.7 装配协议 309 24.7.1 装配协议的常量定义 309 24.7.2 装配协议的类型定义 310 24.7.3 装配协议的数据结构 310 24.8 装配协议中的过程 311 24.9 装配操作的语义 312 24.9.1 MNTPROC_NULL(过程0) 312 24.9.2 MNTPROC_MNT(过程1) 312 24.9.3 MNTPROC_DUMP(过程2) 312 24.9.4 MNTPROC_UMNT(过程3) 312 24.9.5 MNTPROC_UMNRALL(过程4) 313 24.9.6 MNTPROC_EXPORT(过程5) 313 24.10 NFS和装配的鉴别 313 24.11 NFS版本3中的变化 314 24.12 小结 315 进一步的研究 316 习题 316 第25章 TELNET客户端(程序结构) 317 25.1 引言 317 25.2 概述 317 25.2.1 用户终端 317 25.2.2 命令和控制信息 318 25.2.3 终端、窗口和文件 318 25.2.4 对并发性的需 318 25.2.5 TELNET客户端的线程模型 319 25.3 TELNET客户端的算法 319 25.4 Windows中的键盘I/0 320 25.5 键盘控制中使用的全局变量 321 25.6 初始化键盘线程 322 25.7 有限状态机的特点 325 25.8 ELNET数据流中内嵌的命令 325 25.9 选项协商 326 25.10 求/提供的对称 326 25.11 TELNET字符定义 327 25.12 从服务来的数据的有限状态机 328 25.13 状态之间的转换 329 25.14 实现有限状态机 330 25.15 紧凑的FSM表达 331 25.16 在运行时维持紧凑表示 332 25.17 实现紧凑表示 332 25.18 构造FSM转移矩阵 334 25.19 套接字输出的有限状态机 335 25.20 套接字输出FSM的定义 337 25.21 选项子协商的有限状态机 338 25.22 选项子协商FSM的定义 339 25.23 初始化FSM 340 25.24 TELNET客户端的参数 341 25.25 TELNET客户端的核心 341 25.26 TELNET的同步 345 25.27 处理严重的错误 346 25.28 实现主FSM 346 25.29 立即断开连接的过程 347 25.30 中止过程 348 25.31 小结 349 进一步的研究 349 习题 350 第26章 TELNET客户端(实现细节) 351 26.1 引言 351 26.2 有限状态机的动作过程 351 26.3 记录选项求的类型 351 26.4 执行空操作 352 26.5 响应针对回显选项的WILL/WONT 353 26.6 发送响应 354 26.7 响应针对不被支持选项的WILL/WONT 355 26.8 响应针对No Go.Ahead选项的WILL/WONT 356 26.9 一进制传输生成D0/DONT 357 26.10 响应针对不被支持选项的DO/DONT 358 26.11 响应针对传输_进制选项的DO/DONT 359 26.12 响应针对终端类型选项的DO/DONT 360 26.13 选项的子协商 362 26.14 发送终端类型信息 363 26.15 中止子协商 364 26.16 向服务发送一个字符 365 26.17 在用户终端上显示传入的数据 366 26.18 将一块数据写到服务中 369 26.19 与本地客户端的交互 370 26.20 对非法命令的响应 371 26.2l 抄写脚本到文件 371 26.22 抄写脚本的实现 372 26.23 抄写脚本的仞始化 372 26.24 收集脚本文件名的字符 373 26.25 打开脚本文件 374 26.26 中止抄写脚本 375 26.27 打印状态信息 377 26.28 小结 378 进一步的研究 378 习题 379 第27章 将服务程序从UNIX移植到WINDOWS 380 27.1 引言 380 27.2 后台操作 380 27.3 共享描述符和继承 381 27.4 控制TTY 382 27.5 工作目录 382 27.6 建立文件和Umask 383 27.7 进程组 383 27.8 标准I/0描述符 384 27.9 服务互斥 384 27.10 记录进程ID 385 27.11 等待一个子进程退出 385 27.12 使用系统日志设施 386 27.13 其他的不兼容 387 27.14 小结 388 进一步的研究 389 习题 389 第28章 客户服务系统中的死锁和饿死 390 28.1 引言 390 28.2 死锁的定义 390 28.3 死锁检测的难度 391 28.4 避免死锁 391 28.5 单个客户端和服务问的死锁 392 28.6 在单个交互中避免死锁 392 28.7 一组客户端和单个服务之间的饿死 393 28.8 忙连接和饿死 393 28.9 避免阻塞的操作 394 28.10 线程、连接和其他限制 394 28.11 客户端和服务的循环 395 28.12 给依赖性建立文档 396 28.13 小结 397 进一步的研究 397 习题 397 附录A 套接字使用的函数和库例程 399 附录B Windows套接字描述符的操作 433 参考文献 436 译者序    很高兴有机会翻译DouglasE.Comer博士和DavidL.Stevens合作写的《客户-服务程和应用(Windows套接字版)》一书。该书是((TCP/IP网络互连技术》系列丛书的第3卷,同列第3卷的还有UNIX套接字版。 DouglasE.Comer博士在20世纪70年代就参与了TCP/IP和互联网的研究,在该领域具有丰富的经验,并撰写了量的科研论文和教科书。他写的这套丛书负有盛名,已被国内外的许多学作本科生和研究生的教材。    TCP/IP网络体系结构和协议栈已成计算机网络事实上的标准,量的计算机应用系统通过对TCP/IP协议栈的访问获得了网络通信的服务。在应用系统中如何设计客户机和服务?如何实现通信中的并发过程?如何进行远程过程调用?如何设计分布式程序?对于这些经常遇到的问题,作者以其丰富的经验,借助例子深入浅出地在书中一一作了回答。同时作者也结合第1卷和第2卷的内容,说明了一些应用协议的实现方法,对读者深入领会这些协议的精髓提供助。    本书内容丰富,概念清楚,讲解详细,有实例有验证,在每章后面又有足够的习题,可供读者巩固学习到的知识,增强实际应用力。它既适合于高等院校计算机专业的学生,也可供从事在计算机网络上设计写应用程序的开发人员作参考书使用。正如作者所说,学生只有亲手使用教材后,才会欣赏它。我们相信该书会给读者带来助和成功的乐趣。    本书的翻译由张卫和王负责,参加翻译工作的还有:朱逢霖、方奕、董梅、吴哲、王超和刘 。我们在尊重原著的基础上,力求准确、严谨地翻译本书,但由于翻译水平所限,难免有错误和欠妥之处,敬读者批评指正。    译 者    华东师范学计算机系    2004年3月于上海    序言    很荣幸向读者介绍Dr.Douglas E.Comer的著作系列中的Windows套接字部分:TCP/IP网络互联技术。这个系列,从1987年开始写,现在是读者学习网络协议族(Intemet协议族)的资料。该协议族使得不同厂商的计算机间通信成。    我认,与"不必深入了解因特网技术"的说法相反,这项创造性的工作是值得期待的。当媒体和企业使得众对因特网充满了神秘的想像时,Dr.Comer清楚地解释了使得因特网成的技术真相。    随着Intemet上Windows平台的日益流行,Dougs和DavidL.Stevens合著的这套书尤其重。第三卷,客户-服务程与应用,教我们怎样设计和构建客户-服务应用程序,而且更重的是它还教我们怎样理解每个设计决策中所作的平衡和折衷。这对于那些正感受到开放系统和因特网的强的无数Windows程序员来说是一项至关重的技术。    因此,我邀你参加到这个难忘的旅程中来,去理解网络互联技术的理论、设计以及实现方法的面貌和原因。    MarshallT.Rose    Theorist,Implementor,andAgentProvocateur    Del Mar,CalifOmia    很高兴出版网络互连技术系列第3卷的Windows套接字版本。粗略地说,第1卷解释了什么是TCP/IP因特网。第2卷解释了TCP/IP软件如何工作。而第3卷则解释了应用软件如何在因特网上使用TCP/IP通信。它把重点放在客户-服务机制上,并分析了分布式程序的客户端和服务两部分的算法。本书给出了说明每个设计思想的实现方法,讨论了包括应用层网关和管道在内的各种技术。另外,它回顾了几个标准应用协议,使用它们说明一些算法和实现技术。有关死锁和活锁的一章讨论了客户-服务系统失败的几种表现,产生这些问题的原因,以及防止这些问题出现的技术。    我们写这本书是了满足那些个人计算机构建软件的程序员的需求。针对PC机的软件来自微软公司。有两个流行的操作系统:Windows 95和WindowsNT。这两个系统都支持Win32程接口,可以使用本书所讨论的Windows套接字应用程序接口(WindowsSocketAPl)。    本书描述了适合Windows95和WindowsNT的抽象概念。例如,并发性的讨论回顾了Windows下线程的抽象概念,这对于后面章节中并发服务的讨论很重。更重的是,本书所给出的例子代码都已经在Windows95和WindowsNT下测试通过,并且可以从网上下载。得到本书的电子版,可以在下面这个链接地址上找到:    http://www.cs.purdue.edu/homes/comer/books.html    或者在下面这个FTP目录下搜索文件名以TCPIP-vol3开头的文件:    ftp://ftp.cs.purdue,edu/pub/comer    本书采用了容易理解的写结构。开头几章介绍了客户-服务机制和应用程序用于网络通信的套接字接口。另外还描述了并发线程以及相关的创建线程的操作系统函数。后续的章节讨论了客户端和服务的设计,并解释了各种可的设计不是随机的产生的,而是遵循了一种可被理解的模式,它考虑了并发和传输的选择。例如,有一章讨论了一个非并发的服务设计,它使用面向连接的传输(如TCP),而另一章讨论了一个类似的设计,它使用无连接的传输(如UDP)。    我们描述了每个设计如何适应各种可的实现空间,而没有尝试去开发客户-服务交互的抽象理论。我们强调对于程序员来说很重的实际设计原则和技术。每种技术在一定的环境下都有优点,而且都已在工作软件中被使用。我们相信,读者理解了各个设计之间的概念性联系将有助于鉴别每种实现方法的优点和缺点,也会使对各种方法的选择变得更容易。    本书含有的一些例子程序显示了每个设计实际上是如何操作的。多数的例子实现了标准的因特网应用协议。在各种情况下,我们尝试选择一个传达单个设计思想的应用协议,避免在理解上过于复杂。因此,虽然很少有特别出色的例子程序,但是每个例子程序都说明了一个的概念。    后面的章节讨论了远程过程调用的概念,并描述如何利用它来构建分布式程序。它们把远程过程调用技术和客户-服务模型联系起来,显示如何利用远程过程调用来创建客户服务程序。有关TELNET的章节展示了细枝末节如何支配了一个产品程序,以及即使是一个简单的面向字符的协议,其代码是如何的复杂。    本书很部分的重点在并发处理。写过并发程序的学生可很熟悉我们所描述的许多概念,因这些概念可应用于所有的并发程序,而不仅仅是网络应用程序。没写过并发程序的学生可会发现这些概念很难理解。    本书适合于高年级学生或研究生一个学期的网络入门课程。因本书重点在如何使用网络互连技术,而不是网络互联是如何工作的,因此学生几乎不需太多的网络背景知识就理解这些内容。只教师按合适的进度循序渐进,就没有什么特别的概念会令人感到太难。介绍操作系统基本概念或并发程实际经验的基础课程,可提供最佳的背景材料。    学生只有亲手使用教材后,才会欣赏它。因此,任何课程都应该安排程实践,强迫学生将其想法应用到实际程序中。学本科生可以通过反复设计其他的应用协议来学习基本概念。研究生则应该写强调某些细微技术的更加复杂的分布式程序(如第15章中的并发管理技术和第17章中的互连技术)。 .   在此感谢很多人的助。Purdue学因特网研究小组的成员们给本书原稿贡献了技术信息和建议。VinceRusso提供了技术助,JohnLin校对了本书。ChristineComer辑了修订本,并改进了行文和一致性。    Douglas E.Comer    David L.Stevens
发帖
茶馆

538

社区成员

C++ Builder 茶馆
社区管理员
  • 茶馆
加入社区
帖子事件
创建了帖子
2003-08-13 04:38
社区公告
暂无公告