【正文】
:像SMTP(SMTP ,Simple Message Transport Protocol, 簡單郵件傳輸協(xié)議, 用于電子郵件的傳輸),NNTP(NNTP,Network News Transport Protocol,網(wǎng)絡新聞傳輸協(xié)議(USENET))和FTP(FTP,F(xiàn)ile Transfer Protocol , 文件傳送[輸]協(xié)議)。Telnet(Telnet,用于遠程聯(lián)接服務的標準協(xié)議或者實現(xiàn)此協(xié)議的軟件)是另外的套接字服務。UNIX提供了一種機制,憑借著提供服務的名字能夠譯出端口號。● 套接字的優(yōu)勢數(shù)據(jù)通信實驗中利用套接字編程的一個明顯的缺點是沒有像PC機連續(xù)端口那樣多的直接硬件交互。然而,多數(shù)大學生不會處在這樣詳細的知識會很重要的情形中。即使有連續(xù)的端口,這個概念對許多學生來說仍然很抽象?;谔捉幼植襟E地優(yōu)勢是它將套接字的抽象變得很具體。在過去,基于PC機實驗的一個優(yōu)勢是費用的低廉。然而,至少有兩個因素來平衡這種優(yōu)勢。一是現(xiàn)在UNIX工作站普遍使用,PC可以通過安裝UNIX的免費版本來轉(zhuǎn)換成工作站。另一個因素是,即使PC給相對便宜,實際上會出現(xiàn)老化,不穩(wěn)定,機器被分配到一個像數(shù)據(jù)通信實驗這樣專注的工程。我們的經(jīng)驗是我們可以負擔得起使用的機器都非常不穩(wěn)定。雖然套接字編程的“高起點”的本性已經(jīng)作為一個優(yōu)勢強調(diào)了,但使得分配像我們所希望的那樣詳細同樣是可能的。沒有任何軟件支持的套接字編程需要大量“低起點”的理解和操作。一個簡單是修改將是基于UDP包而不是TCP包的分配。許多附加的程序(經(jīng)CRC(循環(huán)冗余碼校驗)的錯誤校驗、順序數(shù)字、接收的確認、接收錯誤的否定確認)都是必要的。無論是UDP或是TCP包,適當?shù)脑O計握手機制對文件傳輸這樣的程序來說都是必要的。通過連續(xù)的端口分配,課程時間就可以投入到作為控制、狀態(tài)、數(shù)據(jù)記錄和類似連續(xù)轉(zhuǎn)換的低起點概念中。通過一個套接字步驟,就可以討論像信息報頭、網(wǎng)絡和機器字節(jié)順序這樣類似的概念了。如果愿意,連續(xù)端口通信的許多適當?shù)闹黝}都可以成為套接字程序和給出的許多相同分配的必須。即使分配了高起點的應用,學生們?nèi)匀槐仨毨斫饬骱途彌_區(qū)之間的不同?!?C++套接字類的優(yōu)勢許多參考書提供了套接字通信的詳細情形,這些參考書提供了任務的例子和方法。所有建立通信、把通信轉(zhuǎn)換成緩沖區(qū)流和錯誤校驗的詳細情況都可以由UNIX系統(tǒng)調(diào)用完成。許多低起點的理解對于編寫穩(wěn)定的應用程序來說是必須的。一個設計得很好的C++類可以被構建用于使用簡單的語義學提供套接字的完全功能。編寫客戶到建立的服務器、事件驅(qū)動服務器和輪流檢測服務器是可能的。作者提供了一組C++類,這些程序都是在GNU下編寫的。 提供的。這些類對給出的任務表現(xiàn)出了非常好的功能。它的接口與輸入輸出流和提供安全類型的輸入輸出一樣。在UDP和TCP域中有套接字流類,就像其中有管道流類一樣。套接字緩沖區(qū)類來源于流緩沖區(qū)類。這樣,學生們必須學習關于沒有套接字輸入與輸出的流和緩沖區(qū)。套接字緩沖區(qū)類包括錯誤功能、準備好檢測、直接操作、上溢出、下溢出和超時功能。套接字選項如消息路由、局部地址的再使用、廣播等等都要設置。這樣,套接字的詳細情形就可以如希望的那樣了。在我們特殊的課程中,使用這些C++類一方面的益處是學生們必須在一年級/二年級的水平課程中使用到C++語言,幫助他們保持學到的技能?!?任務在選擇一個為期三學期的課程任務時,我們渴望實現(xiàn)很多目標。我們被希望設計出一系列的任務來讓學生編寫一個客戶端的應用、一個服務器的應用、一個對等網(wǎng)絡應用,也提供一些像電子郵件和文件傳輸這樣一些標準應用的經(jīng)驗。另外,任務應該由簡單到復雜,循序漸進。我們在下面列出了這些任務要點。這些任務得到了學生們的良好反響。他們感覺到了實踐的樂趣,同時,也有了一個好的計劃。一些以前沒有接觸過它們的學生經(jīng)過努力也都有非常好的結果。這五項明確的任務是:▲ 任務一:套接字客戶端到電子郵件服務器在本地或遠程的機器上編寫一個客戶端程序去連接電子郵件服務器,然后發(fā)送一封電子郵件到一個用戶名(userid—在電子郵件地址中@符號之前的名稱)。用戶不必要是本地或遠程機器上的。例如,這個程序可能叫做smtp,包括兩項任務:主機名和用戶名。我們要求有一個簡單的命令行接口,但是學生們可以自由地發(fā)揮,做出更多精致的電子郵件類型接口來。SMTP(SMTP —Simple Message Transfer Protocol, 簡單郵件傳輸協(xié)議, 用于電子郵件的傳輸)的命令是一定會用到的。列舉一些如下:HELO localname 確認連接機器——本地名稱不需要——一些服務器不需要HELO,但一些要包括。HELP 發(fā)送命令列表MAIL FROM:name 可以是你愿意的任何東西——不經(jīng)過合法性的檢驗RCPT TO:name 郵件的容器—— 不需要是本地名稱DATA 允許信息進入——以“.”作為消息的終止字符QUIT 斷開連接同其他的任務一樣,這個任務也會帶給學生一些不合適的活動。下面是提給學生們的一些警告:顯然你可能在程序中做一些不禮貌的事情。例如,你可能從Daffy Duck那里發(fā)送一串管理員的消息。這需要一些工作量,但這些消息的發(fā)送人將會被記錄。請不要熱衷于這樣幼稚的行為。一些人可能會爭辯說這樣的任務太“危險” ,但是學生們可以學到如何操作套接字,能夠解決如何自己發(fā)送郵件的問題。我們的方法是承認這樣一個問題的存在并提出警告。▲ 任務二:簡單的網(wǎng)絡信息服務器編寫一個有如下特征的網(wǎng)絡服務器程序:1. 從輸入套接字接受命令2. 解釋命令并集合信息3. 發(fā)送輸出命令到輸出套接字你不需要為這個任務編寫一個客戶端程序,因為標準的telnet(Telnet—用于遠程聯(lián)接服務的標準協(xié)議或者實現(xiàn)此協(xié)議的軟件,遠程登錄)客戶端將可以提供這樣的功能。Telnet允許你在客戶端上給一個服務器過程發(fā)送信息并把握返回信息。一個信息的選擇提供系統(tǒng)命令,像域名等等。系統(tǒng)的功能可以從一個C++程序內(nèi)部執(zhí)行。困難的部分是將命令的輸出并發(fā)送輸出到套接字與客戶端連接起來。命令的輸出應該與套接字直接連接。建議有兩種途徑:用管道流類和用傳統(tǒng)的通過用戶構造管道連接的C fork()來執(zhí)行系統(tǒng)功能?!?任務三:對等網(wǎng)絡套接字通信編寫一個作為兩個相同程序執(zhí)行的“聊天”程序。它應該允許用戶自定義連接過程的輸出所出現(xiàn)的信息。這兩個過程經(jīng)過一個套接字連接。程序?qū)⒃试S用戶連接一個確定的過程并監(jiān)聽另一個試圖連接的處理。兩臺機器上運行相同的程序,任務必須包括這些要點:監(jiān)聽的超時、通過服務器程序創(chuàng)建子進程、關閉套接字并終止子進程。一個有限狀態(tài)過渡模型應該呈現(xiàn)出來幫助程序的設計?!?任務四:文件傳輸——服務器和客戶端通過TCP/IP網(wǎng)絡套接字連接編寫一個文件傳輸程序。第一個程序應該與一個FTP服務器功能相同。它應該在幕后運行并等待一個指定端口的連接。第二個程序應該與一個FTP客戶端功能相同。因此,需要一個用戶接口。命令將通過響應進入并發(fā)送到服務器。文件應該可以進行雙向傳輸??蛻舳顺绦驊撏ㄟ^響應行為接受下列命令:ls 服務器上文件列表put 從客戶端到服務器傳送文件get 從服務器到客戶端傳送文件quit 斷開與服務器的連接:mand 在客戶端執(zhí)行mand這對服務器/客戶端的性能比FTP要簡單許多。SFTP(簡單文件傳輸協(xié)議)與它類似。舉例來說,F(xiàn)TP運用2個TCP連接,其中一個類似telnet連接用于控制,另一個作數(shù)據(jù)傳輸。SFTP用一個簡單的TCP連接并提供用戶訪問控制,目錄列表和變更,文件重命名和文件刪除。對于這些命令,這里只有目錄列表是需要的。FTP同樣支持lcd、mput、mget等等。這個任務需要一個握手協(xié)議?!?任務五:三個選擇任務五A:使用UDP的FTP文件傳輸建立UDP套接字而不是TCP套接字執(zhí)行任務4的文件傳輸程序。這個程序需要:⊙ 集合數(shù)據(jù)包⊙ 提供CRC錯誤校驗⊙ 提供包的先后順序數(shù)據(jù)包可能不是按照順序到達,可能重復或丟失,需要重新請求或重新排列。每個數(shù)據(jù)包應該被確認(肯定地或否定地)。我們將采用一個協(xié)議來描述數(shù)據(jù)包的格式和錯誤信息等等。為了測驗使用的協(xié)議,允許用戶指定傳輸中將會出錯的部分。任務五B:雙向文件傳輸改為打開2個套接字執(zhí)行任務4的文件傳輸程序,一個用于控制信息一個用于數(shù)據(jù)傳輸。另外,允許兩個程序同時來回地發(fā)送文件,通過控制信道取消傳送過程。使用多個子進程將是有益的。(一個有限狀態(tài)機器將會是一個好方法)。FTP有著相似的工作方式。它有兩個套接字連接,但是基于不同的原因,因為在這里它執(zhí)行的是一個真正的服務器——客戶端協(xié)議,而不是對等網(wǎng)絡協(xié)議?!?任務五C:多用戶聊天程序任務三涉及了對等網(wǎng)絡聊天程序。這個任務需要多路技術創(chuàng)造聊天服務器的程序,它能夠把握多重的套接字連接。沒有必要編寫客戶端程序因為可以使用telnet。服務器可以從任何套接字接受輸入行并把它們輸出到剩余的套接字連接。當一個用戶連接到聊天服務器,服務器應該及時提供一個用戶名。這個名字應該被廣播到其余的用戶。在用戶離開時同樣要廣播一條消息。當一個用戶的消息被發(fā)送到其它連接的用戶時,應提供用戶名以供辨認?!?結論重新設計數(shù)據(jù)通信課程實驗內(nèi)容的目的是提供這樣的一些任務:⊙ 給學生們更有意義和更實際的內(nèi)容⊙ 更另人愉快的,因此也能更好完成的內(nèi)容⊙ 更現(xiàn)代,但仍然強調(diào)對所發(fā)生內(nèi)容的理解而不僅僅是利用數(shù)據(jù)通信⊙ 循序漸進,環(huán)環(huán)相扣⊙ 基于更加可靠的硬件,丟棄了以前使用的PC機一旦這個套接字范例被選用,目的在于創(chuàng)造一些任務需要學生編寫這樣的代碼:⊙ 利用C++類⊙ 提供一個簡單的客戶端有權使用定義明確的服務器⊙ 提供簡單的服務器功能⊙ 提供對等網(wǎng)絡通信⊙ 提供多路技術服務器功能⊙ 通過一種方式實現(xiàn)一個類似于眾所周知網(wǎng)絡服務的功能⊙ 需要學生們關注可靠通信⊙ 使用一些fork()形態(tài)并進行進程間通信編程這些任務在學生們中得到了非常好的反響。好學生發(fā)現(xiàn)通過設計好的用戶接口或提供增加功能性來增強計劃的方法。基礎不是很好的學生能夠完成任務并發(fā)現(xiàn)它們同樣有意義和有趣。作者在一所小的自由技術大學教授電腦科學的二十年中,這種實驗任務的變化就像其它任何一門課程的變化一樣地被接受了。 附原文:SOCKET PROGRAMMING IN THE DATA COMMUNICATIONS LABORATORYWilliam E. TollComputing and System SciencesTaylor UniversityUpland, IN 46989btoll@ABSTRACTAlthough many data munications courses are taught with no programming content courses designed for puter science majors should include programming. Many data munications courses with a programming ponent make use of serial ports on PCs while some deal with detailed network layer projects. UNIX socket programming allows the students to deal with the same issues and problems, but in a context that is more likely be useful and that is more interesting. In addition, if socket classes are used with C++, only as much detail of socket operation as desired need be presented.lNTRODUCTIONData munications is a standard part of most MIS and CS programs. The actual implementation of the course varies widely as evidenced by the variety of text books available. Many texts, whether oriented toward MIS or CS, provide little or no laboratory activity. MIS programs tend to emphasize management of data munications and networks. Recent news lists postings indicate an emphasis on using data munications and investigations of the types and styles of munication available. National, or international, cooperative projects are popular. CS programs may use very technical texts or a broad text such as used by the author [1] where principl