freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

linux網(wǎng)絡(luò)編程——實現(xiàn)一個局域網(wǎng)的電子郵件系統(tǒng)(編輯修改稿)

2025-01-11 02:48 本頁面
 

【文章內(nèi)容簡介】 n_size))==1) { perror(accept)。 continue。 } printf(server:got connection from %s\n,i_ntoa())。 if (!fork()) if (send(new_fd,Hello,World!\n,14,0)==1) { Linux 網(wǎng)絡(luò)編程 —— 實現(xiàn)一個局域網(wǎng)的電子郵件系統(tǒng) perror(send)。 close(new_fd)。 exit(0)。 } close(new_fd)。 } while(waitpid(1,NULL,WNOHANG)0)。 } 客戶端程序: /*頭文件同上 */ define MAXDATASIZE 100 int main(int argc,char **argv) { int sockfd,numbytes,servport。 struct sockaddr_in servaddr。 char buf[MAXDATASIZE]。 if (argc!=3) { fprintf(stderr,usage:hellocli server39。s ip address server39。s port)。 exit(1)。 } sockfd=socket(AF_INET,SOCK_STREAM,0)。 bzero(amp。servaddr,sizeof(struct sockaddr_in))。 =AF_INET。 =htons(atoi(argv[2]))。 i_aton(argv[1],amp。)。 connect(sockfd,(struct sockaddr*)amp。servaddr,sizeof(struct sockaddr))。 if((numbytes=recv(sockfd,buf,MAXDATASIZE,0))==1) { perror(recv)。 exit(1)。 } buf[numbytes]=39。\039。 printf(Receive from server %s :\n %s,argv[1],buf)。 printf(totally %d bytes received\n\n,numbytes)。 close(sockfd)。 printf(......local socket closed\n)。 return 0。 } Linux 網(wǎng)絡(luò)編程 —— 實現(xiàn)一個局域網(wǎng)的電子郵件系統(tǒng) 第二部分 第三章 郵件系統(tǒng)的實現(xiàn) 第一節(jié) 概述(問題定義、需求分析和可行性分析) 前幾章對 LINUX 系統(tǒng)提供的網(wǎng)絡(luò)編程接口進(jìn)行了分析,為第二 部分的內(nèi)容—— 實現(xiàn)一個 C/S 模型的局域網(wǎng)內(nèi)的電子郵件系統(tǒng) —— 打下了基礎(chǔ)。接下來的章節(jié)將給出該郵件系統(tǒng)的概述、總體設(shè)計、詳細(xì)設(shè)計和本人編寫的服務(wù)器程序和客戶端程序的源代碼。 為方便起見,將要實現(xiàn)的郵件系統(tǒng)命名為 DTMS。由于是為了實習(xí)目的模擬現(xiàn)實的郵件系統(tǒng),該郵件系統(tǒng)較現(xiàn)實中的郵件系統(tǒng)功能上有較大的簡化。具備的是郵件系統(tǒng)必備的一些基本功能。如:申請新郵箱、注銷郵箱、發(fā)郵件、閱讀郵件、刪除郵件、保存郵件。 從服務(wù)器和客戶端的角度,它們分別需實現(xiàn)以下功能: 服務(wù)器: 保存用戶信息(帳號密碼對) 驗證登錄用 戶密碼 郵件接受轉(zhuǎn)發(fā)功能(接受發(fā)信用戶發(fā)來的郵件,將郵件發(fā)給收信用戶) 郵件管理功能(保存,打開,刪除等) 客戶端: 選擇需要的服務(wù) 讀郵件,刪郵件,編輯郵件,發(fā)送郵件 另外,在以下四種場合,服務(wù)器和客戶端需共同完成通信的功能: 客戶端向服務(wù)器發(fā)送服務(wù)請求、密碼等信息 服務(wù)器向客戶端發(fā)送響應(yīng)信息(服務(wù)完成、密碼驗證信息等) 客戶端向服務(wù)器傳送郵件 服務(wù)器向客戶端傳送郵件 服務(wù)器和客戶端分別需實現(xiàn)的功能可以采用 LINUX 系統(tǒng)提供的文件操作系統(tǒng)調(diào)用實現(xiàn)。服務(wù)器和客戶 端共同完成的通信功能可使用 LINUX 系統(tǒng)提供的BSD SOCKET 網(wǎng)絡(luò)編程接口實現(xiàn)??傊瑢ι鲜龉δ?,該系統(tǒng)的實現(xiàn)在目前的Linux 網(wǎng)絡(luò)編程 —— 實現(xiàn)一個局域網(wǎng)的電子郵件系統(tǒng) 知識基礎(chǔ)上是可行的。 第二節(jié) 模塊劃分 整個系統(tǒng)由服務(wù)器程序和客戶端程序兩大部分組成。服務(wù)器程序由兩大模塊組成:通信模塊和服務(wù)器文件處理模塊;客戶端程序也由兩大模塊組成:通信模塊和界面提供模塊。基本結(jié)構(gòu)如下: 服務(wù)器主程序調(diào)用以下兩大模塊: 服務(wù)器文件處理模塊 ⑴信件管理子模塊 (打開郵件 列表,打開郵件,刪除郵件) ⑵用戶信息管理子模塊 (保存帳號密碼對,驗證密碼) 服務(wù)器通信模塊 (服務(wù)器向客戶傳郵件,服務(wù)器向客戶傳服務(wù)響應(yīng)信息) 客戶端主程序調(diào)用以下兩大模塊 客戶端界面提供模塊 客戶端通信模塊 (客戶向服務(wù)器傳郵件,客戶向服務(wù)器傳服務(wù)請求信息) 我們實現(xiàn)的郵件系統(tǒng)的運(yùn)行大致過程為:服務(wù)器和客戶機(jī)分別進(jìn)入主程序,調(diào)用各自通信模塊建立連接。同 時,客戶端調(diào)用界面提供模塊提供菜單式的操作界面,等待用戶根據(jù)菜單提示選擇需要的服務(wù),通信模塊將用戶選擇的服務(wù)用字符串的形式發(fā)送給服務(wù)器,服務(wù)器根據(jù)收到的字符串判斷用戶需要的哪種服務(wù),調(diào)用文件處理模塊中的相應(yīng)服務(wù)子程序(函數(shù))來提供特定服務(wù)。并同時在需要時調(diào)用通信模塊向客戶端發(fā)回應(yīng)信號或傳送文件。 下面對各模塊的功能和實現(xiàn)方案詳細(xì)解釋說明如下: 服務(wù)器文件處理模塊: 包括兩個子模塊,信件管理模塊和用戶信息管理子模塊。這兩個子模塊功能上是獨立的,各自包含一些服務(wù)子程序。實現(xiàn)的方法是一樣的,同為利用 LINUX提供的文件操作系統(tǒng)調(diào)用。為滿足郵件系統(tǒng)提供的基本功能,文件處理模塊需具備以下文件: ( 1)用戶信息文件一個:保存各用戶的帳號密碼信息,以記錄形式保存。 ( 2)郵件列表文件若干:為各用戶保存各自的郵件列表,以記錄形式保存,記錄包括寄信者,郵件編號,發(fā)信時間,主題等項。 每個用戶擁有一個郵件列表文件。 ( 3)郵件文件若干:保存用戶的郵件內(nèi)容。 Linux 網(wǎng)絡(luò)編程 —— 實現(xiàn)一個局域網(wǎng)的電子郵件系統(tǒng) 信件管理子模塊:該模塊包含打開郵件、保存郵件、刪除郵件功能,分別由一個函數(shù)實現(xiàn)。 ( 1)打開郵件列表:在用戶登 錄成功時,即用戶輸入用戶名密碼得到正確驗證時調(diào)用此功能。用一個函數(shù)讀取該用戶的郵件信息文件,產(chǎn)生一個郵件列表的臨時文件,并通過通信模塊將該臨時文件的內(nèi)容傳至客戶機(jī)。 ( 2)打開郵件:在收到客戶“讀郵件”命令時調(diào)用此功能。根據(jù)用戶名以及用戶傳過來的郵件號碼,打開相應(yīng)郵件,通過通信模塊將郵件內(nèi)容傳給客戶機(jī)。 ( 3)刪除郵件:在收到客戶“刪除郵件”命令時調(diào)用此功能。根據(jù)用戶名及用戶傳過來的待刪郵件的號碼利用系統(tǒng)調(diào)用將相應(yīng)郵件刪除。并修改保存該用戶郵件列表的文件。 用戶信息管理子模塊:該模塊包含保 存、刪除帳號密碼對,驗證密碼三個功能。 ( 1)保存用戶密碼對:在新用戶注冊時,即用戶選擇“注冊”命令,并將用戶名和密碼傳到服務(wù)器時調(diào)用此功能,將新用戶的信息 —— 用戶密碼對添加到用戶信息文件中。 ( 2)驗證密碼:在用戶登錄,并發(fā)送帳號密碼到服務(wù)器后調(diào)用此功能。實現(xiàn)原理為根據(jù)欲登錄用戶發(fā)過來的用戶密碼對查找服務(wù)器上的用戶信息文件。若查找成功,發(fā)提示信息到客戶端,并轉(zhuǎn)入調(diào)用打開郵件列表的服務(wù)程序。若查找失敗,發(fā)失敗提示信息到客戶端,等待用戶重新輸入帳號密碼。 服務(wù)器端通信模塊 服務(wù)器程序 在啟動時便調(diào)用 SOCKET 函數(shù)族,創(chuàng)建套接字,綁定端口,開始等待客戶端的連接。當(dāng)有用戶進(jìn)入郵箱,即建立連接。并根據(jù)用戶的不同服務(wù)請求,利用建立好連接的套接字傳送或接收數(shù)據(jù)。在以下四個場合需要調(diào)用服務(wù)器端的 read/write 或 send/revc 函數(shù)與客戶端通信: ( 1)服務(wù)器向客戶端發(fā)服務(wù)響應(yīng)信息(字符串形式) ( 2)服務(wù)器向客戶傳送郵件(服務(wù)器打開郵件文件,傳輸文本,客戶接收文本寫入本地新文件) ( 3)客戶端向服務(wù)器發(fā)服務(wù)請求(字符串形式) ( 4)客戶端向服務(wù)器傳送郵件(客戶打開郵件文件,傳輸文本,服務(wù)器 接收文本寫入本地新文件) 客戶端界面提供模塊 該模塊提供用戶使用郵件系統(tǒng)的界面。采用字符菜單界面的形式??蛻舳酥鱈inux 網(wǎng)絡(luò)編程 —— 實現(xiàn)一個局域網(wǎng)的電子郵件系統(tǒng) 程序啟動時,一邊建立與服務(wù)器的連接,同時提供用戶操作界面。在不同時段(狀態(tài)),將提供不同的界面。根據(jù)用戶不同的操作請求,不斷調(diào)用該模塊提供不同的界面,可細(xì)分為以下幾種: ( 1)系統(tǒng)初始界面:顯示已經(jīng)入郵件系統(tǒng),提供“注冊”,“登錄”命令選擇 ( 2)輸入帳號密碼界面:提示用戶輸入帳號和密碼,用戶選擇“注冊”或“登錄”都進(jìn)入該界面,用戶在此界面中輸入帳號密碼后發(fā)送給服務(wù)器端。 ( 3)進(jìn)入 郵箱界面:打印郵件列表,提供“讀郵件”,“發(fā)郵件”,“刪除郵件”,“退出郵箱”,“注銷用戶”等命令選擇。 ( 4)郵件編輯界面:當(dāng)用戶選擇“發(fā)郵件”進(jìn)入該界面。用戶開始編輯新郵件。根據(jù)命令行提示語句依次輸入收信者,主題,正文,按 Ctrl+D 結(jié)束編輯,郵件自動發(fā)送。 ( 5)讀郵件界面:當(dāng)用戶選擇“讀郵件”命令,服務(wù)器將要讀的郵件傳送到客戶端,在標(biāo)準(zhǔn)終端顯示。 客戶端通信模塊 在客戶端主程序啟動時,即調(diào)用 SOCKET 函數(shù)族與服務(wù)器建立連接。并在需要的場合與服務(wù)器交換數(shù)據(jù)。需要傳送或接收數(shù)據(jù)的場合同服務(wù)器通信 模塊中所述。此模塊與服務(wù)器不同的是需要知道服務(wù)器工作在哪個端口,這里存在一些技術(shù)問題,這個問題將在后面進(jìn)行討論。 第三節(jié) 服務(wù)器程序和客戶端程序的詳細(xì)設(shè)計與分析 一、詳細(xì)設(shè)計 代碼組織: 如前所述,服務(wù)器程序分為主程序和通信模塊及文件處理模塊。主程序和通信模塊放在一個文件中,共同組成服務(wù)器程序 (1~372 行 )。文件處理模塊由 include 語句引用。客戶端程序放在一個文件 中( 375~758 行)。雖然這兩個程序在附錄中是統(tǒng)一編行號( 1~758),這只是為了解釋 方便,實際上它們是運(yùn)行在不同機(jī)器上的兩個不同的 C 文件。文件處理模塊由合作者唐志軍實現(xiàn),限于篇幅,沒有附源代碼,只對接口函數(shù)作了一下解釋。 數(shù)據(jù)格式: 自定義抽象數(shù)據(jù)結(jié)構(gòu)郵件結(jié)構(gòu)類型。一個郵件結(jié)構(gòu)包括以下幾項:收信者,Linux 網(wǎng)絡(luò)編程 —— 實現(xiàn)一個局域網(wǎng)的電子郵件系統(tǒng) 發(fā)信者,主題,郵件正文,發(fā)信時間,郵件編號等等。有件結(jié)構(gòu)定義見 18~25行。 同步機(jī)制: 同步是通信模塊實現(xiàn)正常收發(fā)信息的關(guān)鍵。類似與操作系統(tǒng)原理中的生產(chǎn)者消費者問題,當(dāng)生產(chǎn)者還沒有往緩沖中寫數(shù)據(jù),消費者就不能從緩沖區(qū)中讀數(shù)據(jù),否則取得的數(shù)據(jù)不是有效的數(shù)據(jù),或者導(dǎo)致讀文件失敗。所以在客戶端與 服務(wù)器通信的過程中,必須有嚴(yán)格的同步控制。在本程序中,同步采用一個簡單有效的辦法。人為設(shè)計信息收發(fā)協(xié)議,根據(jù)協(xié)議規(guī)定的步驟,發(fā)信息方在開始發(fā)信息前先發(fā)送一個同步字符,然后再發(fā)有用信息。收信息方在發(fā)信息方發(fā)同步字符前采用循環(huán)讀取的方式等待同步字符的到來,用 WHILE 循環(huán)實現(xiàn),當(dāng)讀到同步字符,才開始讀下面的有用信息。 用于同步的函數(shù)有以下一對: int SendSockChar(int sockfd,char ch):發(fā)送一個同步字符。參數(shù)為套接字號和一個待發(fā)送的字符。該函數(shù)將一個字符寫入套接字中,即發(fā)送給對方 。發(fā)送成功函數(shù)返回 OK。函數(shù)實現(xiàn)見 175~179 行。 char GetSockChar(int sockfd) :接收一個同步字符,接收對方用SendSockChar()發(fā)來的同步字符,讀取過程中用 WHILE 循環(huán),直到讀到有效的同步字符為止,函數(shù)返回值為讀到的同步字符。函數(shù)實現(xiàn)見 166~174 行。 讀寫函數(shù): 合理使用讀寫函數(shù)也是通信模塊實現(xiàn)正常通信的重要點。在利用系統(tǒng)函數(shù) read(),write() 的基礎(chǔ)上,還另外使用了幾個自編的
點擊復(fù)制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1