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

正文內容

linux網絡編程——實現一個局域網的電子郵件系統(編輯修改稿)

2025-01-11 02:48 本頁面
 

【文章內容簡介】 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 網絡編程 —— 實現一個局域網的電子郵件系統 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 網絡編程 —— 實現一個局域網的電子郵件系統 第二部分 第三章 郵件系統的實現 第一節(jié) 概述(問題定義、需求分析和可行性分析) 前幾章對 LINUX 系統提供的網絡編程接口進行了分析,為第二 部分的內容—— 實現一個 C/S 模型的局域網內的電子郵件系統 —— 打下了基礎。接下來的章節(jié)將給出該郵件系統的概述、總體設計、詳細設計和本人編寫的服務器程序和客戶端程序的源代碼。 為方便起見,將要實現的郵件系統命名為 DTMS。由于是為了實習目的模擬現實的郵件系統,該郵件系統較現實中的郵件系統功能上有較大的簡化。具備的是郵件系統必備的一些基本功能。如:申請新郵箱、注銷郵箱、發(fā)郵件、閱讀郵件、刪除郵件、保存郵件。 從服務器和客戶端的角度,它們分別需實現以下功能: 服務器: 保存用戶信息(帳號密碼對) 驗證登錄用 戶密碼 郵件接受轉發(fā)功能(接受發(fā)信用戶發(fā)來的郵件,將郵件發(fā)給收信用戶) 郵件管理功能(保存,打開,刪除等) 客戶端: 選擇需要的服務 讀郵件,刪郵件,編輯郵件,發(fā)送郵件 另外,在以下四種場合,服務器和客戶端需共同完成通信的功能: 客戶端向服務器發(fā)送服務請求、密碼等信息 服務器向客戶端發(fā)送響應信息(服務完成、密碼驗證信息等) 客戶端向服務器傳送郵件 服務器向客戶端傳送郵件 服務器和客戶端分別需實現的功能可以采用 LINUX 系統提供的文件操作系統調用實現。服務器和客戶 端共同完成的通信功能可使用 LINUX 系統提供的BSD SOCKET 網絡編程接口實現??傊?,對上述功能,該系統的實現在目前的Linux 網絡編程 —— 實現一個局域網的電子郵件系統 知識基礎上是可行的。 第二節(jié) 模塊劃分 整個系統由服務器程序和客戶端程序兩大部分組成。服務器程序由兩大模塊組成:通信模塊和服務器文件處理模塊;客戶端程序也由兩大模塊組成:通信模塊和界面提供模塊。基本結構如下: 服務器主程序調用以下兩大模塊: 服務器文件處理模塊 ⑴信件管理子模塊 (打開郵件 列表,打開郵件,刪除郵件) ⑵用戶信息管理子模塊 (保存帳號密碼對,驗證密碼) 服務器通信模塊 (服務器向客戶傳郵件,服務器向客戶傳服務響應信息) 客戶端主程序調用以下兩大模塊 客戶端界面提供模塊 客戶端通信模塊 (客戶向服務器傳郵件,客戶向服務器傳服務請求信息) 我們實現的郵件系統的運行大致過程為:服務器和客戶機分別進入主程序,調用各自通信模塊建立連接。同 時,客戶端調用界面提供模塊提供菜單式的操作界面,等待用戶根據菜單提示選擇需要的服務,通信模塊將用戶選擇的服務用字符串的形式發(fā)送給服務器,服務器根據收到的字符串判斷用戶需要的哪種服務,調用文件處理模塊中的相應服務子程序(函數)來提供特定服務。并同時在需要時調用通信模塊向客戶端發(fā)回應信號或傳送文件。 下面對各模塊的功能和實現方案詳細解釋說明如下: 服務器文件處理模塊: 包括兩個子模塊,信件管理模塊和用戶信息管理子模塊。這兩個子模塊功能上是獨立的,各自包含一些服務子程序。實現的方法是一樣的,同為利用 LINUX提供的文件操作系統調用。為滿足郵件系統提供的基本功能,文件處理模塊需具備以下文件: ( 1)用戶信息文件一個:保存各用戶的帳號密碼信息,以記錄形式保存。 ( 2)郵件列表文件若干:為各用戶保存各自的郵件列表,以記錄形式保存,記錄包括寄信者,郵件編號,發(fā)信時間,主題等項。 每個用戶擁有一個郵件列表文件。 ( 3)郵件文件若干:保存用戶的郵件內容。 Linux 網絡編程 —— 實現一個局域網的電子郵件系統 信件管理子模塊:該模塊包含打開郵件、保存郵件、刪除郵件功能,分別由一個函數實現。 ( 1)打開郵件列表:在用戶登 錄成功時,即用戶輸入用戶名密碼得到正確驗證時調用此功能。用一個函數讀取該用戶的郵件信息文件,產生一個郵件列表的臨時文件,并通過通信模塊將該臨時文件的內容傳至客戶機。 ( 2)打開郵件:在收到客戶“讀郵件”命令時調用此功能。根據用戶名以及用戶傳過來的郵件號碼,打開相應郵件,通過通信模塊將郵件內容傳給客戶機。 ( 3)刪除郵件:在收到客戶“刪除郵件”命令時調用此功能。根據用戶名及用戶傳過來的待刪郵件的號碼利用系統調用將相應郵件刪除。并修改保存該用戶郵件列表的文件。 用戶信息管理子模塊:該模塊包含保 存、刪除帳號密碼對,驗證密碼三個功能。 ( 1)保存用戶密碼對:在新用戶注冊時,即用戶選擇“注冊”命令,并將用戶名和密碼傳到服務器時調用此功能,將新用戶的信息 —— 用戶密碼對添加到用戶信息文件中。 ( 2)驗證密碼:在用戶登錄,并發(fā)送帳號密碼到服務器后調用此功能。實現原理為根據欲登錄用戶發(fā)過來的用戶密碼對查找服務器上的用戶信息文件。若查找成功,發(fā)提示信息到客戶端,并轉入調用打開郵件列表的服務程序。若查找失敗,發(fā)失敗提示信息到客戶端,等待用戶重新輸入帳號密碼。 服務器端通信模塊 服務器程序 在啟動時便調用 SOCKET 函數族,創(chuàng)建套接字,綁定端口,開始等待客戶端的連接。當有用戶進入郵箱,即建立連接。并根據用戶的不同服務請求,利用建立好連接的套接字傳送或接收數據。在以下四個場合需要調用服務器端的 read/write 或 send/revc 函數與客戶端通信: ( 1)服務器向客戶端發(fā)服務響應信息(字符串形式) ( 2)服務器向客戶傳送郵件(服務器打開郵件文件,傳輸文本,客戶接收文本寫入本地新文件) ( 3)客戶端向服務器發(fā)服務請求(字符串形式) ( 4)客戶端向服務器傳送郵件(客戶打開郵件文件,傳輸文本,服務器 接收文本寫入本地新文件) 客戶端界面提供模塊 該模塊提供用戶使用郵件系統的界面。采用字符菜單界面的形式??蛻舳酥鱈inux 網絡編程 —— 實現一個局域網的電子郵件系統 程序啟動時,一邊建立與服務器的連接,同時提供用戶操作界面。在不同時段(狀態(tài)),將提供不同的界面。根據用戶不同的操作請求,不斷調用該模塊提供不同的界面,可細分為以下幾種: ( 1)系統初始界面:顯示已經入郵件系統,提供“注冊”,“登錄”命令選擇 ( 2)輸入帳號密碼界面:提示用戶輸入帳號和密碼,用戶選擇“注冊”或“登錄”都進入該界面,用戶在此界面中輸入帳號密碼后發(fā)送給服務器端。 ( 3)進入 郵箱界面:打印郵件列表,提供“讀郵件”,“發(fā)郵件”,“刪除郵件”,“退出郵箱”,“注銷用戶”等命令選擇。 ( 4)郵件編輯界面:當用戶選擇“發(fā)郵件”進入該界面。用戶開始編輯新郵件。根據命令行提示語句依次輸入收信者,主題,正文,按 Ctrl+D 結束編輯,郵件自動發(fā)送。 ( 5)讀郵件界面:當用戶選擇“讀郵件”命令,服務器將要讀的郵件傳送到客戶端,在標準終端顯示。 客戶端通信模塊 在客戶端主程序啟動時,即調用 SOCKET 函數族與服務器建立連接。并在需要的場合與服務器交換數據。需要傳送或接收數據的場合同服務器通信 模塊中所述。此模塊與服務器不同的是需要知道服務器工作在哪個端口,這里存在一些技術問題,這個問題將在后面進行討論。 第三節(jié) 服務器程序和客戶端程序的詳細設計與分析 一、詳細設計 代碼組織: 如前所述,服務器程序分為主程序和通信模塊及文件處理模塊。主程序和通信模塊放在一個文件中,共同組成服務器程序 (1~372 行 )。文件處理模塊由 include 語句引用??蛻舳顺绦蚍旁谝粋€文件 中( 375~758 行)。雖然這兩個程序在附錄中是統一編行號( 1~758),這只是為了解釋 方便,實際上它們是運行在不同機器上的兩個不同的 C 文件。文件處理模塊由合作者唐志軍實現,限于篇幅,沒有附源代碼,只對接口函數作了一下解釋。 數據格式: 自定義抽象數據結構郵件結構類型。一個郵件結構包括以下幾項:收信者,Linux 網絡編程 —— 實現一個局域網的電子郵件系統 發(fā)信者,主題,郵件正文,發(fā)信時間,郵件編號等等。有件結構定義見 18~25行。 同步機制: 同步是通信模塊實現正常收發(fā)信息的關鍵。類似與操作系統原理中的生產者消費者問題,當生產者還沒有往緩沖中寫數據,消費者就不能從緩沖區(qū)中讀數據,否則取得的數據不是有效的數據,或者導致讀文件失敗。所以在客戶端與 服務器通信的過程中,必須有嚴格的同步控制。在本程序中,同步采用一個簡單有效的辦法。人為設計信息收發(fā)協議,根據協議規(guī)定的步驟,發(fā)信息方在開始發(fā)信息前先發(fā)送一個同步字符,然后再發(fā)有用信息。收信息方在發(fā)信息方發(fā)同步字符前采用循環(huán)讀取的方式等待同步字符的到來,用 WHILE 循環(huán)實現,當讀到同步字符,才開始讀下面的有用信息。 用于同步的函數有以下一對: int SendSockChar(int sockfd,char ch):發(fā)送一個同步字符。參數為套接字號和一個待發(fā)送的字符。該函數將一個字符寫入套接字中,即發(fā)送給對方 。發(fā)送成功函數返回 OK。函數實現見 175~179 行。 char GetSockChar(int sockfd) :接收一個同步字符,接收對方用SendSockChar()發(fā)來的同步字符,讀取過程中用 WHILE 循環(huán),直到讀到有效的同步字符為止,函數返回值為讀到的同步字符。函數實現見 166~174 行。 讀寫函數: 合理使用讀寫函數也是通信模塊實現正常通信的重要點。在利用系統函數 read(),write() 的基礎上,還另外使用了幾個自編的
點擊復制文檔內容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1