內容簡介
這是一本使用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.5SOCKADDR_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.2SO_REUSEADDR套按字選項
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 參考文獻