Perl网络编程
基本信息
原书名: Network Programming With Perl原出版社: Addison-Wesley
作者: (美)Lincoln D.Stein
译者: 王超 刘云
丛书名: 科海电脑技术丛书
出版社:清华大学出版社
ISBN:7302052891
上架时间:2002-3-25
出版日期:2002 年3月
页码:582
版次:1-1
内容简介
这是一本使用Perl编程语言创建基于网络的应用程序的指导书。
全书内容分为四个部分:基础知识,为公共服务开发客户,开发TCP客户/服务器系统和高级主题。本书的目的是教会读者利用最新版Perl为TCP/IP提供的接口,创建健壮、易维护且高效的客户/服务器应用程序,核心内容是设计基于TCP的客户/服务器系统的方法和选择以及用于特定应用的高级技术。
全书层次分明,内容由浅入深,实例丰富,并给出了具有实际指导意义的源代码。因此,对于网络管理员和广大Perl初中级程序员来说,本书是一种重要的资源。
目录
第1部分基础知识
第1章 输入输出基础
1.1 perl和网络
l.1.l 为进程间通信建立的语言
1.1.2 为文本处理建立的语言
1.1.3 开放源代码项目
1.1.4 面向对象网络扩展
1. 1.5 安全
1.1.6 性能
1.2 轻松上网
1.3 文件句柄
1.3.l 标准文件句柄
1. 3.2 输入和输出操作
1.3.3 检测文件尾
1.3. 4 行尾之处的混乱
1.3. 5 打开和关闭文件
1. 3.6 缓冲和阻塞
l.3.7 标推i/o缓冲
1.3. 8 传递和存储文件句柄
1.3. 9 错误检测
.1.4. 使用io::handle模块和io::file模块的面向对象语法
l.4.l 对象和引用
1.4.2 io::handle模块和io::file模块
1.5 小结
第2章 进程、管道和信号
2.l 进程
2.1.l fork()函数
2.1.2 system()函数和exee()函数
2.2 管道
2. 2. 1 打开管道
2.2. 2 使用管道
2.2. 3 易用的管道:反引号运算符
2.2.4 强大的管道:pipe()函数
2.2.5 双向管道
2.2.6 从一般的文件句柄中区分管道
2. 2.7 可怕的pipe错误
2. 3 信号
2.3.1 通用信号
2. 3. 2 截取信号
2. 3.3 处理pipe异常
2.3.4 发送信号
2. 3.5 对信号处理程序的忠告
2.3. 6 让慢的系统调用超时
2.4 小结
第3章 berkeley套接字简介
3.l 客户、服务器和协议
3.l.1 协议
3. 1.2 面向二进制和面向文本的协议
3.2 berkeley套接字
3.2.l 套接字分析
3. 2. 2 数据报套按字
3.2.3 流套接字
3. 2. 4 数据报套接字与流套接字
3.3 套接字寻址
3.3.1 ip地址
3. 3.2 保留ip地址、子网和网络掩码
3.3.3 ipv6
3.3.4 网络端口
3.3.5 sockaddr_in结构
3.4 一个简单的网络客户
3.5 网络名和服务
3.5.l 将主机名转换为ip地址
3. 5.2 主机名转换示例
3. 5. 3 获取协议和服务的相关信息
3. 5.4 再访dnyhme客户
3.5.5 网络信息的其他资源
3.6 网络分析工具
3. 6.l ping
3. 6.2 nslookup
3.6.3 traceroute
3. 6.4 netstat
3. 6.5 tcpdump
3.6.6 mactcp watcher
3. 6.7 scanner
3.6.8 net_toolbox
3. 7 小结
实4章 tcp协议
4.l 一个tcp echo客户
4.2 外出连接相关的套接字函数
4.3 一个tcp echo服务器
4. 3. 1 进入连接相关的套接字函数
4.3. 2 tcp_echo_servl的局限性
4.4 调整套接字选项
4.4.l 通用的套接字选项
4.4.2 so_reuseaddr套按字选项
4.4.3 fcntl()函数和ioctl()函数
4.5 其他套接字相关的函数
4. 6 tcp信中的异常情况
4.6.l 调用connect()过程中的异常
4.6.2 读操作和写操作中的异常
4.7 小结
第5章 io:: socket api
5. l 使用io:: socket
5.1.l 一个daytime客户
5.1.2 tcp echo客户
5.2 io:socoke方法
5.2.1 io::handle类层次
5.2.2 创建io:socoket::inet对象
5. 2.3 io:: socket对象方法
5.3 更实用的例子
5.3.1 再访逆转的echo服务器
5.3. 2 一个web客户
5.4 性能和风格
5.5 并发客户
5.5.l 一个唠叨的客户,第一次尝试
5.5.2 一个唠叨的客户,第二次尝试
5.6 小结
第2部分为公共服务开发客户
第6章 ftp和telnet
6.1 net:: ftp
6.1.l 一个net::ftp例子
6.1.2 ftp和基于命令的协议
6.1. 3 net::ftp api
6. 1.4 一个目录镜像脚本
6.2 net:: telnet
6. 2.l 一个简单的net::telnet例子
6.2. 2 net:: telnet api
6. 2. 3 一个远程改变密码的程序
6. 2.4 对非teinet协议使用net::telnet
6.2.5 expect模块
6.3 小结
第7章 smtp:发送邮件
7.l 邮件模块简介
7. 2 net:: smtp
7.2. 1 smtp协议
7. 2.2 nct::smtp api
7. 2.3 使用net::smtf
7.3 mailtools
7. 3.l 使用mailtools
7.3.2 mail:: header
7.3. 3 mai1::internet
7.3.4 一个邮件自动响应程序
7.3.5 mail::mailer
7.4 mime.tools
7.4.1 mime简介
7.4. 2 mime::"模块的组织
7.4. 3 mime:: entity
7. 4.4 mime:: head
7.4.5 mime:: body
7. 4. 6 mime:: patser
7. 4.7 mime例子:邮寄新近的cpan项
7.5 小结
第8章 pop,imap和nntp:处理邮件和网络新闻
8.1 pop
8.1.1 pop3邮箱概述
8. 1.2 net::pop3 api
8.l.3 通过pop检索并处理mime消息
8.1.4 pop_fetch脚本
8.1.5 popparser模块
8.2 imap协议
8.2.1 imai,邮箱概述
8.2. 2 net::imap::simple api
8. 3 internt新闻客户
8.3. 1 net::nntp
8.3. 2 net::nntp api
8. 4 一个新闻到邮件的网关
8.5 小结
第9章 web客户
9.1 安装lwp
9.2 lwp基础知识
9.2.l http::request
9.2.2 htrp::response
9.2.3 lwp::useragen
9.3 lwp实例
9.3.l 抓取rfc列表
9.3.2 镜像rfc列表
9.3.3 模拟填充表单
9.3.4 使用http::request::commn发送填充表单
9.3.5 使用multipart/form-data的文件上传
9.3.6 抓取有密码保护的页面
9.4 解析html和xml
9.4.l 格式化html
9.4.2 html::formatter api
9.4.3 html::treebuilderapi
9.4.4 从get_url脚本返回格式化的html
9.4. 5 html.::parser模块
9.4. 6 使用html::parser
9.4.7 html::parserapi
9.4.8 使用html::parser的search_rfc
9.4.9 从远程url中提取图像
9.5 小结
第3部分 开发tcp客户/服务器
第10章 创建子进程的服务器和inetd守护进程
10.l 并行的标准技术
10.1.l 创建于进程的服务器
10.1.2 多线程服务器
10.l.3 多路复用服务器
10.2 运行程序的例子:心理疗法学者服务器
10. 3 作为创建于进程服务器的心理疗法学者
10.3.1 僵进程
10.3.2 在chld处理程序中收割子进程
10.3. 3 使用fork()的心理疗法学者服务器
10.3.4 在windows平台上使用心理疗法学者服务器
10.4 心理疗法学者服务器的一个客户脚本
10.5 在unix系统上守护进程化
10.5.1 自动后台运行
10.5.2 pid文件
10.6 自动启动网络服务器
10.7 使用inetd超级守护进程
10.7.l 使用inetd
10.7. 2 在wait模式中使用inetd
10.8 小结
第11章 多线程应用程序
11. l 关于线程
11.1.l 线程是试验性的
11.1. 2 线程api
11.1.3 一个简单的多线程应用程序
11.1.4 锁定
11.1.5 thread模块的功能和方法
11.1.6 线程和信号
11.2 一个多线程的心理疗法学者服务器
11. 3 一个多线程的客户
11.4 小结
第12章 多路复用应用程序
12.1 一个多路复用的客户
12.2 io::select模块
12.2.l 内置的selec必函数
12. 2.2 什么时候文件句柄为i/o做好推备
12.2. 3 组合select()和标准i/o
12.2.4 调整"低水位线"
12.3 多路复用的心理疗法学者服务器
12.3. 1 服务器主程序
12.3. 2 eliza::chatbot::polite模块
12.3.3 心理疗法学者服务器的问题
12.4 小结
第13章 无阻塞i/o
13.l 创建无阻塞i/o句柄
13.1.l 创建无阻塞句柄:函数接口
13.1.2 创建无阻塞句柄:面向对象接口
13.2 使用无阻塞句柄
13.2.l 对无阻塞文件旬柄调用sysread()
13. 2. 2 对无阻塞文件句柄调用syswrite()
13. 3 使用无阻塞文件旬柄执行面向行的i/o
13. 3. 1 使用io::gedine
13. 3.2 io::getline模块
13.4 一个普通的无阻塞uo模块
13.4.l 一个无阻塞的echo服务器
13.4.2 一个无阻塞的面向行的服务器
13.4.3 io::sessinndata模块
13.4. 4 io::sessinnset模块
13.4.5 io::linebufferedset类和io::linebufferedsessinnl
13. 4.6 对非套接字句柄使用io::sessionset
13.5 无阻塞连接和接收
13.5.1 io::socket超时参数
13.5.2 无阻塞connect()
13. 5.3 多个同时连接
13.5.4 一个简单的http客户
13. 5.5 httpfetch模块
13.5.6 无阻塞accept()
13. 6 小结
第14章 安全的服务器
14. 1 使用系统日志
14.1.1 unix的syslog
14. 1.2 sys::syslog
14. 1.3 向心理疗法学者服务器添加日志功能
14.1. 4 使用删()和出成)做日志
14.1.5 在win32平台上使用事件日志
14. 1.6 直接写日志到文件中
14.2 设置用户特权
14.2. 1 改变用户id和组id
14. 2.2 作为根用户运行心理疗法学者服务器
14.3 受损模式(taint mod)
14.4 使用chroot()
14.5 处理hup和其他信号
14. 5.l 对主脚本的改变
14.5.2 对daemon模块的改变
14. 6 小结
第15章 预创建于进程和预创建线程
15.l 预创建于进程
15.l.l 一个web服务器
15.l.2 序列化的web服务器
15. 1.3 接收并创建于进程的web服务器
15.1.4 预创建子进程的web服务器,版本1
15.1. 5 预创建子进程的web服务器,版本2
15.1.6 自适应的预创建于进程的服务器
15.1.7 使用共享内存的自适应的预创建于进程的服务器
15.2 预创建线程
15. 2.l 一个线程化的web服务器
15.2.2 简单的预创建线程的服务器
15.2.3 自适应的预创建线程的服务器
15.2.4 netserver::generic模块
15. 3 性能测量
15.4 小结
第16章 io:: poll
16.1 使用io::poll
16.2 io::poll事件
16. 3 io::poll方法
16.4 一个使用io::poll的无阻塞tcp客户
16.5 小结
第4部分高级话题
第17章 tcp紧急数据
17. 1 "带外"数据和紧急指针
17. 2 使用tcp紧急数据
17.2.1 so_oobinline选项
17.2.2 与select()一起使用紧急数据
17. 3 sockatmark()函数
17.4 一个曲解(travesty)服务器
17.4.1 text::travesty模块
17.4.2 设计曲解服务器
17.4.3 曲解客户程序
17.4.4 测试曲解服务器
17.5 小结
第18章 udp协议
18.l 一个日期时间客户程序
18.2 创建并使用udp套接字
18. 2.l 创建udp套接字
18.2.2 send()和recv()函数
18.2.3 绑定udp套接字
18.2.4 连接到udp套接字
18. 3 udp错误
18.3. 1 异步错误
18. 3. 2 丢包和分段
18.4 使用io::socket处理udp套按字
18.5 发送给多台主机
18.6 udp服务器
18.6.l 一个逆转回显的udp服务器
18.6.2 udp客户回显程序
18. 7 让udp应用程序更加健壮
18. 7.l 让udp接收过程超时
18.7.2 复制数据报和乱序数据报
18. 8 小结
第19章 udp服务器
19.l 一个internet聊天系统
19.1.l 一个会话示例
19.1.2 聊天系统的设计
19.2 聊天客户程序
19.2.1 chatobjects::comm模块
19.2. 2 chatobjects::chatcodes模块
19.3 聊天服务器
19.3.1 服务器脚本主程序
19.3.2 chatobects::user类
19.3.3 chatobects::channel类
19. 4 检测不响应的客户程序
19.4.l 在聊天系统中添加still_here事件
19. 4.2 对chatobjects::chatcodes模块的修改
19.4.3 chatobjects::timeduser子类
19.4.4 修改后的chat_client程序
19.4.5 修改后的chat_server程序
19.5 小结
第20章 广播
20.1 单报和广播
20.2 广播的概念
20.3 发送和接收广播
20.3. 1 发送广播
20.3.2 接收广播
20.4 没有广播地址的广播
20.4. 1 全1的广播地址
20.4.2 在运行时查找具有广播能力的接口
20.4. 3 io:: interface模块
20.4.4 io:: interface模块剖析
20.5 增强聊天客户程序以支持资源发现
20.6 小结
第21章 组播
21.l 组播的基本知识
21.1.l 保留的组播地址
21.1.2 组播地址和硬件过滤
21.1.3 穿过wan的组播
21.1.4 组播ttl
21.2 使用组括
21.2. 1 发送组括消息
21.2.2 用于发送组播消息的套按字选项
21.2. 3 接收组播消息
21.2.4 io::socket::multicast模块
21.3 组括应用程序示例
21.3.1 日期时间组括服务器
21.3.2 使用组播的日期时间客户程序
21.3.3 使用组播的聊天系统
21.4 小结
第22章 unix域套接字
22. 1 使用unix域套接字
22.1.l 面向函数的unix域套接字接口
22.1.2 面向对象的unix域套按字接口
22.l.3 unix域套按字与文件权限
22.2 一个"换行"服务器
22. 2.1 text::wrap服务器
22.2.2 text::wrap客户程序
22.3 将unix域套按字用于数据报
22.3. 1 使用unix域套按字的日期时间服务器
22.3.2 使用unix域套接字的日期时间客户程序
22. 4 小结
附录a 补充的源代码
附录b perl的错误码和特殊变量
附录c 参考文献